1. 操作符
(1)一元操作符 ++ -- + - :可应用于任何类型变量,对于非数值,会相应调用Number()进行转换
(2)位操作符:对于非数值类型的变量进行位操作时,先调用Number()转换为数值,然后对得到的数值进行位操作。按位非~,按位与&,按位或|,按位异或^,左移<<,有符号右移>>(以符号位填充空位,保持了数值正负性),无符号右移>>>(以0填充空位)。
(3)布尔操作:逻辑非!,两个!!连用等价于Boolean()函数,逻辑非可应用于任何值,该值会先调用Boolean函数转换为boolean类型,再进行!操作。逻辑与&&,当操作数中不全是Boolean类型时,若两个操作数中,有一个为NaN则返回NaN,有一个为null则返回null,有一个为undefined则返回undefined,若两个都是对象则返回第二个,若第一个为对象则返回第二个操作数,若第二个是对象且第一个求值结果为true则返回第二个操作数。逻辑或||,当操作数中不全是Boolean类型时,若两个操作数中,若第一个为对象则返回第一个操作数,若第一个操作数求值结果为false则返回第二个操作数,若两个都是对象则返回第一个操作数,若两个多少null返回null,若两个都是NaN则返回NaN,若两个都是undefined则返回undefined。
注:逻辑与和或都是短路操作。
(4)乘、除、取模、加、减:
乘法*,若操作数不是数值,内部先调用Number()函数,再进行乘法操作,结果超出数值范围则返回Infinity或-Infinity,有一个操作数为NaN则返回NaN,Infinity*0=NaN,Infinity*非0数返回Infinity或-Infinity。
除法/,若操作数不是数值,内部先调用Number()函数,再进行除法操作,结果超出数值范围则返回Infinity或-Infinity,有一个操作数为NaN则返回NaN,Infinity/Infinity = NaN,0/0 = NaN,非0有限数除0返回Infinity或-Infinity,Infinity除以任何非0值返回Infinity或-Infinity。
取模%,若操作数不是数值,内部先调用Number()函数,再进行取模操作,无穷大除以有限大返回NaN,有限大除以0返回NaN,Infinity%Infinity=NaN,被除数为0,结果为0,有限大除以无限大返回有限大。
加法+,如果两个数都是数字,则正常加法操作,有NaN则为NaN,Infinity+Infinity=Infinity,-Infinity+ -Infinity = -Infinity,Infinity+-Infinity=NaN,+0 + +0 = +0,-0 + -0 = -0,+0 + -0 = +0。.如果操作数中有字符串,则将另一个操作数转为字符串,并拼接起来。
减法-,若操作数不是数值,内部先调用Number()函数,再进行减法操作,有NaN则为NaN,Infinity-Infinity=NaN,-Infinity- -Infinity = NaN,Infinity- -Infinity = Infinity,-Infinity- Infinity = -Infinity,+0 - +0 = +0,-0 - -0 = +0,+0 - -0 = -0。
(5)关系操作符:<,>,<=,>=。若两个操作数均为数字,则比较数字;若两个操作数均为字符串,则依次比较两个字符串对应位置字符的编码值(不是字典序!),若一个操作数是数值则将另一个转换为数值进行数值比较,布尔型转换为数值进行比较,若一个为对象则调用toValue如果没有该函数则调用toString在进行比较。
(6)相等操作符:==和!=先转换再比较;===和!==不转换直接比较。
(7)赋值操作符:=,+=,-=,*=,/=,%=,<<=,>>=>,>>=
(8)条件操作符:result = a==b?a:b;
2. 语句
(1)if-else语句,do-while语句,while语句,for语句,switch语句(case中可以使用任何数据类型甚至可以进行值判断num>0)
(2)for-in语句,用来枚举对象的属性 for(var aa in arr){alert(aa);}
(3)label语句与break、continue联合使用可调出多层循环(不建议使用啦~)
3. 函数参数
(1)JS参数在内部由一个数组实现,可以通过arguments对象对参数进行访问,arguments.length可以获得传入参数的个数,因为这种实现方式,调用函数时传入的参数个数可以与函数声明的参数个数不同。
(2)JS并不关心函数声明中的参数个数与类型,因此JS没有函数重载。函数重载是通过函数签名(参数数量与类型不同)来实现的
(3)对于未指定返回值的函数,其返回为undefined