严格相等运算符(Strict Equality Comparison)===

ECMA-262的中定义了 === 的比较规范,我们可以通过规范来加深对此的理解
http://www.ecma-international...
clipboard.png

clipboard.png

总结下来:就两点吧

 1. 如果类型不一样,就直接返回false
 2. 类型一样,除了数字类型,只要值一样,就返回true。数字中存在一个比较特殊的值(NaN), 只要        
    两边只要存在一个NaN就返回false。需要注意。

== 相等运算符(Abstract Equality Comparison)

ECMA-262中定义了 == 的比较规范,我们可以通过规范来加深对此的理解
http://www.ecma-international...
clipboard.png

== 是在面试中很容易遇到或者工作中容易出错误的地方。我们需要好好掌握它的规范,当然,使用 === 替换 == 是一个好习惯。但是我们还是需要对此好好掌握(知其然,还需要知其所以然)
总结下来:有下面几点

 1.  null、undefined对比返回true,而其他类型对比返回false
 2.  String、Boolean、Number类型转换成为Number,然后进行比较。转换规则可以参考 
     https://segmentfault.com/a/1190000013262657   
 3.  Object类型和基本类型比较,Object类型通过valueOf和toString两个方法, 获取到基本类型,然后按照规则2进行比较
 4.  相同类型就按照严格相等运算(===)来比较。 

火星田园犬
933 声望685 粉丝

小心驾驶, 专业埋雷