自动类型转换
在JavaScript中,使用 ==
、===
和 -
等运算符能够使得类型自动转换。
关于不同类型的值的比较
flase == 0; //true
"" == flase; //true
"1" == 1; //true
"0" == false; //true
null == false; //flase
undefined == false; //false
undefined == null; //true
null == null; //true
undefined == undefined; //true
如上示例,0,空字符串等等都会转换成布尔类型的false。但是当遇见null
和 undefined
时,只有两边都是null或undefined
的情况下,才会返回true。
NaN
NaN特点:
- 任何涉及NaN的操作都会返回NaN
- NaN与任何值不相等,包括NaN本身
深入理解逻辑运算符 && 和 ||
以前一直的固有思维就是 &&
和 ||
的逻辑运算符的使用产生的是boolean类型的值,即逻辑运算符产生的结果不是true就是false。图样图森破!
其实是这样,当比较的是布尔值,才会返回布尔值。如果是其他类型的值,则返回其他类型的值。
Demo1
var a = 1;
var b = 2;
console.log(a && b); //return 2
console.log(a || b); //return 1
a = 0;
console.log(a && b); //return 0
console.log(a || b); //return 2
由于 &&
和 ||
的短路特性,对于&&
来说,一旦左边的值可以转化为false时,就retrun左边的值;当左右两边的值都能转化为true时,则return右边的值,即Demo1中的b。
以此类推,对于||
来说,当左边的值可以转化为true时,则return左边的值;当左边转化false,右边无论true or false都return右边。
撞了南墙也不回头的 & 和 |
&&
和 ||
有短路的特性,而 &
和 |
则是不“短路”与和不“短路”或。
A & B
假设A可以转化为false,依然会执行B。以此类推:
A | B
假设A可以转化为true,依然会执行B。
一个比较有意思的Demo:
Demo2
var a = 1;
var b = 2;
if ((a=3) & (b=4)){
}
console.log(a); //return 3
console.log(b); //return 4
上述Demo显示了&
符号的不短路,还有 =
和 ==
的区别。