javascript - 在 JavaScript 中,typeof x == 'y' 和 typeof x === 'y' 之间有什么区别吗?

标签 javascript performance comparison undefined typeof

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

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

我知道进行严格比较会更快,但除非在极端情况下,否则性能提升应该是察觉不到的。另一个想法是,始终使用 === 会更清楚,因为它确实会导致 类似 操作的问题,例如 x == undefined x === 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

我们知道它总是一个字符串,而且它只会是一些预定义值的字符串,因此在比较 typeof 的结果时没有明确使用严格运算符的理由,但是应该使用严格的比较运算符以提高可读性,并避免该语句出现任何可能的异常。

但是

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.311.9.6如果它们是同一类型,则应该没有区别。

关于javascript - 在 JavaScript 中,typeof x == 'y' 和 typeof x === 'y' 之间有什么区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30813154/

相关文章:

javascript - Firefox 中的 Vue devtools 未检测到 Vue 3 应用程序

javascript - 在 Javascript 中创建一个可以访问局部变量的类

performance - 三个属性与一个 NSDictionary 的内存效率比较

C# 如何处理可空类型

comparison - 充分使用 'if'语句或 'try/catch' block ?

javascript - 在 webgrid 中添加表格行时出现分页问题?

javascript - 从变量中减去一个数字

c - 循环中的空间局部性

Javascript 优化...全局变量

c++ - 创建一个比较函数来对 C 风格的字符串进行排序