ECMAScript 相等:对象类型为 null 吗?

ECMAScript equality: Is null of Type Object?

提问人:neoexpert 提问时间:1/3/2022 最后编辑:Jonas Wilmsneoexpert 更新时间:1/3/2022 访问量:111

问:

我正在尝试实现 ES262 中描述的算法,即抽象相等比较算法。它指出:

  1. 如果 Type(x) 与 Type(y) 相同,则

    一个。如果 Type(x) 为 Undefined,则返回 true。

    b.如果 Type(x) 为 Null,则返回 true。

因此,当我们进行比较时:

console.log(null == {})

它的计算结果应为 true,因为 null 和 {} 具有相同的类型。我理解正确吗?

JavaScript 平等

评论

1赞 neoexpert 1/3/2022
在 JavaScript 中,表达式 (typeof null === typeof {}) 的计算结果为 true
1赞 apokryfos 1/3/2022
typeof null存在实际上是一个错误,而不是一个预期的功能。由于向后兼容性问题,没有人修复该错误object
1赞 mplungjan 1/3/2022
2ality.com/2013/10/....
1赞 apokryfos 1/3/2022
按照这个逻辑也应该是正确的null == { foo: 'bar' }
7赞 FZs 1/3/2022
Type()在规范中typeof 不同。 确实有自己的内部类型 Null,只是 typeof 也为它返回“object”。null

答:

2赞 2 revsQuentin #1

它的计算结果应为 true,因为 null 和 {} 具有相同的类型,并且 x 为 null,

这是你的错误。

类型不同。

评论

0赞 neoexpert 1/3/2022
我认为我的错误是假设 typeof 运算符的行为方式与文档中使用的 Type() 运算符相同。