JavaScript中的表达式与运算符学习
1、隐式类型的转换
- 如果参与数学运算的某操作数不是数字型,js就会自动将此转换为数字类型。此过程称为
隐式类型转换
- 隐式转换的本质是内部调用
Number()
函数
true + true ==> Number(true) + Number(true) = 1 + 1 = 2
false + 2 ==> Number(false) + 2 = 0 + 1 = 2
3 * '2天' ==> 3 + Number('2天') = 3 * NaN = NaN
注意:当进行加法运算,某操作数为字符串时,并不会发生隐式转换,而是起到
连字符
作用
2、相等与全等
==
:相等。只比较值,不比较类型。本质是通过隐式转换后来比较值是否相等===
:全等。同时比较值和类型。
2.1、undefined 与 null
null
与undefined
在进行相等
比较时,涉及隐式强制类型转换,ES5
规范中规定
undefined == null // true
undefined === null // false
undefined
的类型为undefined
,而null
的类型为object
2.2、NaN不自等
NaN == NaN (false)
2.2.1、判断NaN
- 可使用
isNaN()
来判断值是否为NaN
- 但
isNaN()
的原理与Number()
的执行结果是一致,意味着Number()
的执行结果为NaN
,isNaN()
的执行结果也是NaN
。(尽量不要使用)
isNaN(NaN) // true
isNaN('3天') // false
3、JavaScript没有连比
// 假设a = 16
3 <= a <= 15 // ==执行结果==> (true <= 15) ==> true ,但实际为false
// 正确的写法
3 <= a && a <= 15
4、逻辑运算符中的短路计算
- 优先级:
非 -> 与 -> 或
- 短路计算的原理:
- 当前面的操作数能决定结果时,后面的操作数不会再运行,即结果为
前面的操作数
。 - 相反,当前面的操作数无法决定结果时,结果即为
后面的操作数
。
- 当前面的操作数能决定结果时,后面的操作数不会再运行,即结果为
3 && 6 // 6
false && true // false
false || 5 // 5
1 || 4 //1