简单来说,'==' 表示等于,是相等运算符;
'==='表示值相等并且类型相同,是全等运算符;
最显著的区别是,如果操作数的类型不同,== 运算符会在比较之前尝试将它们转换为相同的类型。
'==='不尝试类型转换,始终将不同类型的操作数视为不同。
如果两个操作数都是对象,则仅当两个操作数都引用同一个对象时才返回true。
对于'=='来说,当两边的数值类型不同时:
- 当数字以字符串比较,会将字符串转换为数字值
- 如果某一操作数是Boolean,则将布尔操作数转换为1或0
- 如果某一操作数是对象,会尝试使用对象的valueOf和toString方法将其转换为初始值。
使用Object.is()来进行相等判断时,一般情况下和三等号的判断相同,它处理一些特殊的情况 ,比如-0和+0不再相等,两个NaN是相等的。
notice:
NaN是number类型
null == undefined ==> true
null === undefined ==> false
typeof null => object
typeof undefined => obdefined
字符串的话,讲究顺序。
引用类型是存在堆里的!