运算符
根据运算符的数量分为:一元运算符、二元运算符、三元运算符
根据运算符的功能分为:算术运算符、赋值运算符、比较运算符、逻辑运算符、条件运算符、位运算符
本章节根据功能总结运算符。
1. 算术运算符:+ - * / % ++ --
-
+、-、*、/、%跟数学的算术运算符没有区别
3 + 5 = 8 10 - 4 = 6 3 * 4 = 12 12 / 4 = 3 12 % 5 = 2 // 取余
-
++、--
var num = 3; num++; console.log(num); // 4
var num = 3; ++num; console.log(num); // 4
var num = 3; --num; console.log(num); // 2
var num = 3; num--; console.log(num); // 2
由上面例子得出:无论++、--,或者是++、--在前在后,其结果都是自身增加1或者自身减1。
那么++、--在前或者在后的区别是什么呢?
var num = 3;
console.log(num++); // 3
console.log(num); // 4
由上面例子得出:++在后,console.log()先输出num的值,之后num的值自增1变成了4。
var num = 3;
console.log(++num); // 4
console.log(num); // 4
由上面例子得出:++在前,console.log()先自增1变成4,之后再输出num的值。
再做个练习
var num = 3;
var res = num + num++;
console.log(num); // 4 只需要关注num++有多少次,则可以获得num的值(++有一次,则num为4)
console.log(res); // 6 num++的++在后,会先和前面的num做求和,在自增,结果就是 3 + 3 = 6
var num = 3;
var res = ++num + num++;
console.log(num); // 5 只需要关注num++有多少次,则可以获得num的值(++有两次,则num为5)
console.log(res); // 8
第一个++num,num得到结果4,++在前,做中间+运算的值应该是4
第二个num++,num得到结果5,++在后,做中间+运算的值应该是4
4 + 4 = 8;
上述例举的都是++运算,--同理,只不过替换为对应的减法运算即可
注意事项:
-
任何值都可以做算术运算(使用Number()的转换原则)
2 + true = 3; // true会被隐性转换为1 5 - '1' = 4 '3' * '4' = 12 '12' / 6 = 2; var o = { valueOf: function () { return 1; } }; o + 1 = 2; // 先调用o的valueOf方法,得到NaN,继续调用toString方法 var num = true; num++; // num = 2; '12a' / 4 = NaN; // '12a'被转换为NaN,NaN与任何值运算都为NaN
-
+的特殊性
3 + 5 = 8; // 加法运算 3 + '5' = 35; // 连接运算
总结:+两侧是数值类型,执行加法运算,+两侧不是数值类型,执行连接运算
-
tips:巧妙转换其他类型为数值类型
'3' * 1 = 3; '2' - 0 = 2;
2. 赋值运算符:= += -= *= /= %= <<= >>= >>>=
var sum = 0;
sum += 5; // 等价于 sum = sum + 5
sum -= 5; // 等价于 sum = sum - 5;
sum *= 5; // 等价于 sum = sum * 5;
sum /= 5; // 等价于 sum = sum / 5;
sum %= 5; // 等价于 sum = sum % 5;
var num = 3;
num <<= 5; // 等价于 num = num <<= 5;
num >>= 5; // 等价于 num = num >>= 5;
num >>>= 5; // 等价于 num = num >>>= 5;
3. 比较运算符 == === != !== > < <= > >=
比较运算符跟数据的比较也是一致的,我们主要说说其中需要注意的点
-
==和===区别
==和!=:先转换在比较
===和!==:仅比较不转换
var num1 = 3; var num2 = '3'; num1 == num2; // true num1 === num2; // false 特殊比较: null == undefined; // true null === undefined; // false
-
对象的比较
var obj1 = { title: 'Modeest' }; var obj2 = { title: 'Modeest' }; console.log(obj1 == obj2); // false console.log(obj1 === obj2); // false
注意:obj1和obj2值相同,但是在计算机中存在两块内存地址,这里比较他们的地址,所以为false
var obj1 = { title: 'Modeest' }; var obj2 = obj1; console.log(obj1 == obj2); // true console.log(obj1 === obj2); // true
此处obj1和obj2是引用赋值,在计算机中指向同一块地址,比较结果为true
4. 逻辑运算符(布尔操作符)
-
逻辑与:&&(两真为真,其余都为假)
-
逻辑或:||(两假为假,其余都为真)
-
逻辑非:! (取反)
注意事项:
-
关注返回结果
true && false // false 3 && 0 // 0 true && '' // '' true || false // true 3 || true // 3 0 || 'name' // 'name'
总结:逻辑与和逻辑或运算符,对两侧的值进行隐性转换,但是最终结果还是取值本身,不会获取隐性转换结果
5. 条件运算符(三元运算符)
boolean_expression ? true_value : false_value
var num = 5 > 3 ? 5 : 3;
console.log(num); // 5
6. 位运算符
待续。。。
7. 运算符优先级
![](https://img.haomeiwen.com/i3435555/00edc58982e9b725.png)
网友评论