为什么 null == 0 为false

以下为文档截图 附上链接 https://tc39.es/ecma262/#sec-islooselyequal

微信截图_20220208095546.png

  1. x,y如果类型相同 则比较转化为字符串之后的值

  2. x是null y是undefined 返回true
    ……

  3. 如果没有符合以上类型的 则返回false

大家都知道 null 是Object类型, 0是Number类型
x是Object y是Number
js在根据比较规则一一对应时 发现并没有匹配的 也就不知道该怎么比较 也就只能傻不拉几的按第14条规则来return了个false

真是离了个大普

并且由于ES6 采用了一种策略叫One JavaScript
即:

  1. 新版本始终完全向后兼容(但偶尔可能会有轻微、不明显的清理)
  2. 旧特性不删除也不修复,而是引入更好的版本,比如let就是var的改进版
  3. 如果语言的某些方面有变化,只在新的语法结构内生效,即隐式选用,例如,yield只在generator中才是关键字、模块和类中的所有代码都默认开启严格模式

所以这个问题很大概率不会修复 最多会引入新的比较方式