一、一元操作符
1.递增和递减操作符
前置型 ++i --i
后置型 i++ i--
执行前置递增和递减操作时,变量的值都是在语句被求值之前改变的。
示例1:
var a = 10;
var b = 20;
var c = ++a + b;
var d = a + b;
console.log(c); //31
console.log(d); //31
示例2:
var a = 10;
var b = 20;
var c = a++ + b;
var d = a + b;
console.log(c); //30
console.log(d); //31
示例3:
var a = 1;
var b = ++a +a;
var c = a++ +a;
console.log(b); //4
console.log(c); //5
数值、字符串、布尔值、对象都能使用递增和递减操作符;如果不是数值数据,则调用转型函数Number()转换为数值,再进行相应的操作。
2.一元加和减操作符
一元加和减操作符,主要用于基本的算术运算,也可以用于转换数据类型。
一元加操作符,放在数值前面,对数值不会产生任何影响;但是放在非数值前面,则会调用Number()函数,对该非数值的值进行转换。
一元减操作符,用于表示负数;应用于非数值时,先调用Number()函数,再将得到的结果转换为负数。
二、位操作符 —— 好高大上的感觉,先行跳过,有待补充
三、布尔操作符
1.逻辑非(!)
逻辑非操作符可用于JS中的任何值,首先将它的操作数转换为布尔值,然后对其取反。
规则如下:
如果操作数是一个对象,转换为布尔值为true,取反,为false;
如果操作数是null,转换为布尔值为false,取反,为true;
空字符串,false,取反,为true;
非空字符串,true,取反,为false;
数值0/NaN,为false,取反,为true;
非0数值(Infinite),为true,取反,为false;
undefined,为false,取反,为true。
同时使用两个逻辑非操作符(!!)可将一个值转换为其对应的布尔值,其结果与调用Boolean()函数一致。
2.逻辑与(&&)
逻辑与操作属于短路操作,如果第一个操作数是false,则结果直接为false;如果第一个操作数为true,则结果为第二个操作数。
在有一个(或两个)操作数不是布尔值的情况下,把操作数转换为布尔值进行逻辑与操作,但是返回结果为原值。
示例1:
var a = 0;
var b = "string";
console.log(a&&b); //0
console.log(b&&a); //0
注意:在逻辑与操作中使用未定义的值可能会导致错误。
var x = 5;
alert(x&&y); //ReferenceError: y is not defined
3.逻辑或(||)
逻辑或也是短路操作,如果第一个值为true,则直接返回true,无需对第二个操作数求值;如果第一个操作数为false,则返回第二个操作数;即使第二个操作数也是false,也是返回第二个操作数。
在有一个(或两个)操作数不是布尔值的情况下,把操作数转换为布尔值进行逻辑或操作,但是返回结果为原值。
var x = 0;
var y = null;
console.log(x||y); //null
注意:在逻辑或操作中使用未定义的值可能会导致错误。
利用逻辑或,避免为变量赋null或undefined值:
var myObject = preferredObject || backupObject;
四、乘性操作符
1.乘法(*)
如果操作数都是数值,执行常规乘法计算;
如果有一个数是NaN,结构为NaN;
如果Infinite与0相乘,结果为NaN;
如果Infinite与非0数值相乘,结果为Infinite;
如果Infinite与Infinite相乘,结果为Infinite;
如果有一个操作数不是数值,则调用Number()函数,将其转换为数值,再应用上述规则。
2.除法(/)
如果操作数都是数值,执行常规除法计算;
如果有一个数是NaN,结果为NaN;
Infinite除以Infinite,结果为NaN;
Infinite除以非0数值,结果为Infinite;
Infinite除以0,结果为Infinite;
0除以0,结果为NaN;
非0有穷数除以0,结果为Infinite;
如果有一个操作数不是数值,则调用Number()函数,将其转换为数值,再应用上述规则。
3.求模(%)
如果操作数都是数值,执行常规除法计算,返回所得的余数;
如果有一个数是NaN,结果为NaN;
如果Infinite除以Infinite,结果为NaN;
如果Infinite除以有穷数,结果为NaN;
如果有穷数除以0,结果为NaN;
如果被除数有穷除以Infinite,结果为被除数。
0除以任何数,结果为0;
如果有一个操作数不是数值,则调用Number()函数,将其转换为数值,再应用上述规则。
五、加性操作符
1.加法
如果有一个数是NaN,结果为NaN;
如果是Infinite加Infinite,结果为Infinite;
如果是-Infinite加-Infinite,结果为-Infinite;
如果是Infinite加-Infinite,结果为NaN;
如果是+0加+0,结果为+0;
如果是-0加-0,结果为-0;
如果是+0加-0,结果为+0;
如果两个操作数都是字符串,则将两个字符串拼接起来;
如果只有一个操作数是字符串,则将另一个操作数转换为字符串,然后将两个字符串拼接起来。
如果有一个操作数是对象、数值或布尔值,则调用它们的toString()方法取得相应的字符串值;
对于undefined和null,则调用String()函数并取得相应的字符串“undefined”和“null”。
var a = 5;
var b = 10;
var message = "The sum of a and b is" + a + b; //结果为510
var message = "The sum of a and b is" + (a + b); //结果为15
2.减法
如果有一个数是NaN,结果为NaN;
如果是Infinite减Infinite,结果为NaN;
如果是-Infinite减-Infinite,结果为NaN;
如果是Infinite减-Infinite,结果为Infinite;
如果是-Infinite减Infinite,结果为-Infinite;
如果是+0减+0,结果为+0;
如果是-0减-0,结果为+0;
如果是+0减-0,结果为-0;
如果有一个操作数是字符串、布尔值、null或undefined,则先调用Number()函数;
如果有一个操作数是对象,则先调用valueOf()方法,如果得到的值是NaN,则减法的结果就是NaN;如果没有valueOf()方法,则调用其toString()方法。
六、关系操作符
小于(<)、小于等于(<=)、大于(>)、大于等于(>=)
如果两个操作数都是数值,则执行数值比较;
如果两个操作数都是字符串,则比较两个字符串对应的字符编码值;
如果一个操作数是数值,则将另一个操作数转换为数值;
如果一个操作数是对象,则调用这个对象的valueOf()方法;如果对象没有valueOf()方法,则调用toString()方法。
如果一个操作数是布尔值,则将其转换为数值;
任何操作数与NaN进行比较,结果都会返回false。
七、相等操作符
1.相等(==)与不相等(!=)
先转换操作数,再比较相等性;基本规则:
如果有一个操作数是布尔值,在比较之前先转换为数值;
如果有一个操作数是字符串,另一个操作数是数值,在比较之前先将字符串转换为数值;
如果有一个操作数是对象,另一个不是,则调用对象的valueOf()方法;
如果两个操作数都是对象,则比较它们是不是同一个对象;如果两个操作数都指向同一个对象,则返回true,否则返回false;
null值与undefined值相等;
在比较相等性之前,不能将null值或undefined转换成其它任何值;
NaN不等于任何值,即使是它自己。
2.全等(===)和不全等(!===)
只有在不转换数值类型的情况下相等,全等才会返回true;
null == undefined;但是null !== undefined
八、条件操作符
variable = boolean_expression ? true_value : false_value;
对布尔值表达式求值,若为true,则返回第一个值;若为false,则返回第二个值。
九、赋值操作符
赋值操作符的作用,将右边的值赋给左边的变量。
如果在赋值操作符的左边添加其它操作符,可以完成复合赋值操作,简化赋值操作;
var num = 10;
num +=10 ; //num = num +10;
十、逗号操作符
在一条语句中声明多个变量;
用于赋值,表达式中的每一项都会被计算,但是返回最后一项;
var num = (1,2,3,4,5);
alert(num); //5