【问题标题】:In JavaScript, is there any difference between typeof x == 'y' and typeof x === 'y'?在 JavaScript 中,typeof x == 'y' 和 typeof x === 'y' 有什么区别吗?
【发布时间】:2015-06-12 22:38:08
【问题描述】:

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

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

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

【问题讨论】:

  • 通常最好使用严格比较来避免松散比较的问题。此外,与潜在的脆弱代码相比,额外的= 不算什么。
  • 性能提升应该是难以察觉的,但在缩小时也会受到惩罚,所以我会选择最好/最干净的选项,我认为尽可能使用严​​格的运算符。
  • 既然你已经标记了performance,那么你的答案就是not really
  • @JosephtheDreamer 这是有道理的。虽然如果typeof 的结果总是相同,并且如果程序员足够聪明,可以知道======typeofnullundefined 之间的区别,等等,然后我想知道它到底有多大的问题。无论哪种方式,似乎共识是始终使用===,除非另有需要。
  • 如果你正在压缩你的 .js 文件,并且you should be,我打赌一直使用=== 会产生比同时使用===== 更小的文件。

标签: javascript performance comparison undefined typeof


【解决方案1】:

在这种情况下,这两种方式都绝对没有任何有用的区别。

typeof 运算符返回一个字符串,指示未计算的操作数的类型。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof

我们知道它总是一个字符串,而且只会是几个预定义值的字符串,所以在比较 typeof 的结果时没有显式理由使用严格运算符,但是为了便于阅读,应该使用严格的比较运算符,并避免该语句出现任何可能的异常。

但是

使用 == 的松散相等性
松散相等比较两个值是否相等,然后将两个值转换为通用类型。

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


编辑

根据文档11.9.311.9.6 如果它们是相同的类型应该没有区别。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
相关资源
最近更新 更多