JavaScript中typeof x == 'y'和typeof x === 'y'有区别吗?

In JavaScript, is there any difference between typeof x == 'y' and typeof x === 'y'?

我知道严格比较运算符和松散比较运算符之间的区别。显然 x == y 不同于 x === y。但是每当我看到使用 typeof 的代码时,它总是使用 ===.

如果 typeof 运算符的计算结果总是字符串(例如 'boolean'、'number' 等),那么 typeof x == 'y' 和 [=19 就不会=] 总是呈现相同的结果?如果是这样,为什么要使用 ===

我知道进行严格比较会更快,但除了在极端情况下,性能提升应该是察觉不到的。另一个想法是,始终使用 === 会更清楚,因为它 确实 会导致 similar 操作出现问题,例如 x == undefinedx === undefined。将这些情况减少到 == 以改进缩小和传输编码是否值得,还是保持 === 以保持运行时性能和总体清晰度更好?

在这种情况下,这两种方式都没有任何用处。

The typeof operator returns a string indicating the type of the unevaluated operand.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof

我们知道它总是一个字符串,而且它只会是一些预定义值的字符串,所以没有 explicit 使用严格运算符的理由比较 typeof 的结果,但是为了可读性,应该使用严格的比较运算符,并避免 any 该语句的可能异常。

但是

Loose equality using ==
Loose equality compares two values for equality, after converting both values to a common type.

话虽这么说,使用严格比较应该稍微快一些,因为没有转换,但差异很小,没关系,micro optimizing is a very bad thing


编辑

根据文档11.9.3 and 11.9.6如果它们是同一类型,应该没有区别。