1、===:三个等号我们称为等同符,当等号两边的值为相同类型的时候,直接比较等号两边的值,值相同则返回true,若等号两边的值类型不同时直接返回false。
2、==:两个等号我们称为等值符,当等号两边的值为相同类型时比较值是否相同,类型不同时会发生类型的自动转换,转换为相同的类型后再作比较。
思考:[] ==![]结果是什么?
为什么?
[ ] == [ ] //false,是因为当两边都是相同类型的时候,==我们会对比两边的数据,而[ ]是引用类型,两个分别指向不同的堆内存。
而[ ] == ![ ]//true ,!的优先级大雨==,所以先运算右边,![ ] == false,这样 “[ ] == ![ ]”相当于“[ ] == false”
这时候 “==” 中的数据类型不相等,所以首先会先数据类型转换在比较值
JS的相等操作符判断原则:
1、如果一个值是对象,另一个值是数字或字符串,则将对象转换为原始值再进行比较。对象通过toString()方法或valueOf()方法转换为原始值。
2、如果其中一个值是true,则将其转换为1再进行比较。如果其中一个值是false,则将其转换为0再进行比较。
3、 null与undefined相等
由此可知,[ ] 相当于 0,! [ ] => false => 0 , 所以 " [ ] == ! [ ] " 相当于 “ [ ] == false” 相当于 “0 == 0” 所以所以所以======》[ ] == ![ ]//true
还有以下
false == 'false' // false
0 == ‘ ’ //true