==与===的区别(配合数据类型转换)

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

原文地址:https://www.cnblogs.com/chorkiu/p/10381990.html