相等表达式

‘==’ 又是一个JavaScript 中一个著名的失误,许多的编程规范甚至要求完全避免用 == 运算,使用 ‘=== 来替代 ‘==‘。

对于 ‘==’, 它在ECMA262 中写的非常的复杂,但是归根结底,类型不通的变量比较的时候也只有三条规则:

  • undefined 与 null 相等
  • 字符串和 bool都转换为数字再比较
  • 对象转换为 primitive类型再比较

这样我们就可以理解:

  • flase == ‘0’ (true)
  • true == ‘true’ (true)
  • [] == 0 (true)
  • [] == false (true)
  • new Boolean(‘false’) == false (false)

这里不太符合直觉的有两点:

  • 一个是即使字符串与 boolean 比较,也都要转换成数字;

  • 另一个是对象如果转换成了 primitive 类型跟等号另一边类型恰好相同,则不需要转换成数字。

此外,== 的行为也经常跟 if 的行为(转换为 boolean)混淆。总之,我建议,仅在确认 == 发生在 Number 和 String 类型之间时使用,比如:

document.getElementsByTagName('input')[0].value == 100

总而言之,尽量使用 ===

原文地址:https://www.cnblogs.com/ssaylo/p/13158354.html