你不知道的js之隐式强制类型转换
1.| |和&&
注:
- undefined
- null
- false
- +0
- -0
- NaN
- ” ”
以上为假值,其余都是boolean真值
&&和| |运算符的返回值并不一定是布尔类型,而是两个操作数其中的一个值
var a = 42;
var b = "abc";
var c = "null";
a||b;//42
a&&b;//"abc"
c||b;//"abc"
c&&b;//null
| |和&&会对第一个操作数执行判断,如果其值不是布尔值,先进行boolean强制类型转换 然后再判断
对于| | 如果说条件判断是true就返回第二个操作数 , false就返回第一个操作数
对于&& 如果说条件判断是true就返回第一个操作数 , false就返回第二个操作数
条件语句中的判断也会先转化为布尔值在进行判断
2.相等比较中的隐式强制类型转换(==)
1.字符串与数字之间——先把字符串转换为数字再比较
var a = 42;
var b = "42";
a==b;//true
2.其他类型与布尔类型——先把布尔类型转换为数字再比较
var a = 42;
var b = true;
a==b;//false
3.null与undefined——–直接相等
undefined==null//true
null==undefined//true
以下是经常出现的相等比较
"0" == null; //false
"0" == undefined; //false
"0" == false; //true
"0" == NaN; //false
"0" == 0; //true
"0" == ""; //false
false == null; //false
false == undefined; //false
false == NaN; //false
false == 0; //true
false == ""; //true
false == []; //true
false == {}; //false
"" == null; //false
"" == undefined; //false
"" == NaN; //false
"" == 0; //true
"" == []; //true
"" == {}; //false
0 == null; //flase
0 == undefined; //flase
0 == NaN; //flase
0 == []; //true
0 == {}; //flase
作者总结
0 false "0" [] ""任意两个之间通过强制类型转化都是相等的
注:false== “false” //false和[ ] == [ ] //false
==两边有[] "" 0 尽量不要使用==
两边都有true和false 千万不要使用==
本文为作者原创,写的有不对的地方希望大神能指出来