js是弱类型语言,==比较时会进行隐式转换。比如 1 == '1'是true,因为会把他们自动转化为数字进行处理。===不会进行类型转换,是绝对相等,一般用这个比较靠谱。
js中 === 最保险的比较时比较两个字符串是否相等,因为在某些情况下,其他类型的值都会转化为字符串进行存储。比如,取input的val值取出来的就是字符串,但是我们赋值的时候是数字。
奇怪的情况:
1、 0 == '0'; //true
2、 0 == !'0';//true
3、 !0 == '0'; //false
4、 0 == '000000'; //true
5、 0==false; //true
6、 '00' == '000'; //false
7、 0 == ''; //true
8、'0' == ''; //false
9、 Boolean('0'); //true
10、 Boolean(0); //false
分析:
1、隐式转换,把字符串'0'转为数字0,然后比较
2、隐式转换,把数字0转为布尔值false, !(非)会把字符串'0'转为false
3、数字0是false,!(非)会把数字0转为true,true 和字符串'0'不相等
4、隐式转换,把字符串'000000',转化为数字,即是0
5、0在和非数字且不能转为数字的值比较时,会自动转化为布尔值。即false
6、字符串比较,不相等
7、0 和 '' 都会隐式转换为false
8、字符串比较,不相等
(上面如果===,全都是false)
关于true和false的比较
'true' == true; //false
'false' == false //false
字符串不会进行隐式转换所以不相等
网友评论