关于‘= =’和‘ = = =’的区别
错误的理解:
==:检查值是否相等
===:检查值和类型是否相等
正确的理解:
==:宽松相等
===:严格相等
什么是宽松相等
==在比较的时候会进行隐式强制转换,会讲其中的一个或两个值变为同一种类型再进行比较
例如:
字符串转number
var a = 11,b = '11'
console.log(a==b); // true
console.log(a===b);// false
布尔值和字符串比较,在比较==的时候将b转换为number类型1,然后布尔值也转换为number类型 1
var a = true,b = '1'
console.log(a==b); // true
console.log(a===b);// false
undefined和null比较,null只与自身相等或undefined,而非其他值!(NaN也是)
var a = undefined,b = null
console.log(a==b); // true
console.log(a===b);// false
其中,NaN!==NaN
var a = NaN,b = NaN
console.log(a==b); // false
console.log(a===b);// false
其中对象(引用数据类型)格式也可以进行隐式强制类型转换
var a = 1,b = [1]
console.log(a==b); // true
console.log(a===b);// false
但是undefined不能被封装
var a = 1,b = Object(a)
console.log(a==b); // true
console.log(a===b);// false
还有一些其他的抽象的例子
<script>
"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; //false
0 == undefined; //false
0 == NAN; //false
0 == []; //true
0 == {}; //false
</script>
1、!表示进行隐式强制转换为布尔型,再取反,而[]的布尔值为true,!true的话就是false
2、所以就是[]==false
3、这里[]类型转换为Number就是0,false也是0,0==0,自然返回的就是true
var a = ![],b = []
console.log(a==b); // true
console.log(a===b);// false