== 与 ===的区别
相等运算符(==)的几种情况说明:
一:如果一个操作数是null与undefined做比较时会返回true,而NaN与任何操作数做比较都会返回false,包括与自己做比较。
二:如果俩个操作数都是对象,则仅当俩个操作数都引用同一个对象时才会返回true否则都是false,而不是引用同一个对象的都会返回false 例如:
工作台第一个返回false 第二个返回true。
出现这个原因是因为:字面量是存储在栈内存,而对象是存储在堆内存。字面量的比较就是直接比较值而言,而对象的比较是比较它的内存地址。每创建一个对象,都会在堆内存开辟一个新空间,及它们有自己的物理地址。只有地址相同对象才会相同。
三:若俩个操作数进行比较时是不同的操作数,在比较之前会将他们转换成相同的类型包扣了如下的情况。
1:当数字与字符串比较时,会尝试将字符串转换成数字在比较。
2:如果操作数之一有boolean值,则会将它转换成0或1.
3:如果操作数之一是对象,而另一个是数组或者字符串。浏览器会尝试使用valueof()和toString方法转换对象后再进行比较
四:如果俩个操作是相同类型会进行如下比较
1:string:当且仅当俩个操作数字符串的顺序和数量相同时才会返回true
2:number:当且仅当俩个数字的大小以及数量相同才会返回true,此外+0与-0都会当做0来考虑
而严格等于(===)与相等运算符的最大区别就是不同类型的操作数进行比较时,浏览器是不会对操作数进行类型转换的。
如果有任何说的不对或者需要改进的地方都欢迎读者提出修改,感谢