自动添加分号,但是:1.减少错误 2.方便压缩 3.提高性能
var
声明变量,函数作用域
2. 数据类型
typeof可以查看变量的数据类型。 (变量/数值字面量) 返回对应数据类型字符串
1. Undefined
一个值,undefined
,声明又没有初始化的变量,默认值为undefined
。也可以显示给变量赋值undefined
。
(未声明变量) 也会返回"undefined"
2. Null
一个值,为null
,typeof(null)返回'object'
。
3. Boolean
true和false
。所有其他类型的值,都可以通过 转换成true
或者false
。 转换规则:
true |
false |
---|---|
特殊值:
-
Number.MIN_VALUE
(最小值 -
Number.MAX_VALUE
(最大值 -
Infinity
(无穷大,超过JS数据范围,可以通过Number.POSITIVE_INFINITY
得到 -
-Infinity
(负无穷,Number.NEGATIVE_INFINITY
-
Number.MAX_SAFE_INTEGER
(最大整数 -
Number.MIN_SAFE_INTEGER
(最小整数 NaN
任何涉及NaN
的操作都返回NaN
,如Nan / 10
NaN
不等于任何值,包括它本身,NaN == NaN // false
isNaN()
用来判断一个变量是否是数值
数值转换:
Number()
,parseInt()
, parseFloat()
。
Number()
转换规则:
-
true
和false
会转换为1
和0
-
null
返回0
-
undefined
返回NaN
- 字符串忽略前导0,十六进制可以转换,空字符串为0,其他的不合法字符串转换为
NaN
。 - 对象,调用
valueOf()
方法,为undefined
则调用toString()
再转换字符串。
parseInt()
转换规则:
- 忽略前面的空白 碰到不合法字符转换结束
parseInt('123blue'); parseInt(''); parseInt('0xA'); parseInt(' 22.5'); parseInt(22.5); parseInt('zzz');
- 八进制(0开头数字)有的时候转换规则不统一。
-
parseInt(number,radix)
转换为指定进制。
parseFloat()
只转换十进制。
5. String
单引号('
)或双引号("
)包裹。两种方式没有区别。
转义字符:
-
\n
换行 -
\t
制表 -
\b
空格 -
\r
回车 -
\\
斜杠 -
\'
单引号 -
\"
双引号
获取字符串长度
toString()
方法: 除了null
和undefined
值,其他数据都有toString()
方法。字符串会返回一个副本。
6. Object
JS可以通过var o = new Object()
来创建对象。
-
hasOwnProperty(propertyName)
:用于检查当前对象是否存在某个属性。其中propertyName
为字符串。 -
isPrototypeOf(Object)
:用于检查传入的对象是否是另一个对象的原型。 -
propertyIsEnumerable(propertyName)
:用于检查给定属性是否可以用for-in来枚举。其中propertyName
为字符串。 -
toString()
:返回对象的字符串。 -
valueOf()
:返回对象的字符串,数值或布尔值表示。
constructor()
:构造函数
1. 一元运算符
递增递减操作符 ++
,--
,对于整数,使用方法和C语言,Java等相同。但是JS中不仅可以对整数使用,对浮点数也同样适用。同时对于其他类型的变量,会转变成Number
然后进行运算,不合法将返回NaN
。
o = -1 i = o--;
- 一元加和减操作符 对于数字,
+
,-
和普通的运算符号一样,同时,快速转换成Number
类型。
o = -1 i = -o;
2. 位操作符
按位非(~
):操作数的负值减一。
- 按位与(
&
)
- 按位或(
|
)
- 按位异或(
^
)
- 左移(
<<
)
- 算术右移(
>>
): 最左端补符号位
- 逻辑右移(
>>>
):最左端补0。
3. 布尔操作符
逻辑非(!
):返回布尔值取反。通过两个取反(!!
)可以达到Boolean()
的效果。
- 逻辑与(
&&
):短路操作。如果第一个操作数的布尔值为false,则返回第一个操作数,如果第一个操作数对应的布尔值为true,则返回第二个操作数。
(obj != 代码可以简化成下面的代码
obj && obj.doSomething();
- 逻辑或(
||
):和逻辑与一样,短路操作。
4. 乘性操作符
++
,--
,对于整数,使用方法和C语言,Java等相同。但是JS中不仅可以对整数使用,对浮点数也同样适用。同时对于其他类型的变量,会转变成Number
然后进行运算,不合法将返回NaN
。
+
,-
和普通的运算符号一样,同时,快速转换成Number
类型。
~
):操作数的负值减一。
&
)|
)^
)<<
)>>
): 最左端补符号位>>>
):最左端补0。!
):返回布尔值取反。通过两个取反(!!
)可以达到Boolean()
的效果。
&&
):短路操作。如果第一个操作数的布尔值为false,则返回第一个操作数,如果第一个操作数对应的布尔值为true,则返回第二个操作数。
||
):和逻辑与一样,短路操作。
如果对非数值操作数进行乘性运算,将会自动转换成数值。
- 乘法(
*
)
Infinity或-Infinity
;
一个操作数是NaN
返回NaN
;
Infinity和0
相乘,返回NaN
;
Infinity和非零数值,Infinity
相乘,返回Infinity
;
- 除法(
/
)
x/NaN
,NaN/x
,Infinity/Infinity
,x/0
返回NaN
。
- 求模(
%
)
x/Infinity,x/0
=> NaN
x(有限数值)/Infinity => x
5. 加性操作符
- 加法
一个操作数是字符串,另外一个操作数将转换成字符串然后连接。
- 减法
6. 关系操作符
- 小于(
- 和数值的比较,非数值操作数将转换为数值。
- 字符串之间按字典序比较。
<
),大于(>
),小于等于(<=
),大于等于(>=
)
7. 相等操作符
- 相等(
==
)和不相等(!=
) - 两个操作数会先做强制类型转换,然后再比较他们的相等性。 不同数据类型转换规则:
-
Boolean
->0
or1
-
String
比较Number
:String
->Number
-
Object
比较 其他类型,对象会取valueOf()
方法返回的值 null == undefined // true
null == anything // false
null != anything // true
- 如果两个操作数都是对象,则当他们指向同一个对象时相等。
- 全等(
===
)和不全等(!==
)
- 如果两个操作数数据类型不相等返回
false
而不会进行类型转换。
8. 条件操作符(? :
)
9. 赋值操作符(=
)
10. 逗号操作符(,
):返回最后一项
代码,最好也用{ }
括起来。
-
if
语句 -
do-while()
语句 -
while
语句 -
for
语句在for语句中定义的变量,就算在语句结束后也仍然生效,因为var定义变量是函数作用域。
count = 10 ( i = 0; i < count; i++ -
for-in
语句输出顺序不定。循环之前应该先确认对象的值是不是
null
或undefined
。(property -
label
语句label: statement
指定
break
或continue
的位置。(和Java中相同。 -
break
和continue
语句 -
with
语句with
语句的作用是将代码的作用域设置到一个特定的对象中。严格模式下不允许使用。语法:
with(expression) statement;
qs = location.search.substring(1 hostName = url =代码 qs = search.substring(1 hostName = url = -
switch
语句expression === value。
函数" data-source-line="290">四、函数
函数的基本语法:
调用函数时的参数可以和函数声明时参数个数不同。ECMAScript中的参数在内部使用一个数组来表示的,在函数体内可以通过
arguments并不是Array
的实例,但是可以通过arguments[index]
获取任意一个元素。通过arguments.length
可以获得参数个数。
函数重载的,如果定义了名字相同的多个函数,那么将只有最后的函数生效。
arguments和命名参数是同步的,但是未传递的参数不可以通过改变arguments
改变。谨记arguments
不是数组。