javascript - 为什么在 JavaScript 中 === 比 == 快?

标签 javascript performance

<分区>

查看这些测试:

最佳答案

这是 javascript 必须为 === 做的事情:

  1. 如果 Type(x) 与 Type(y) 不同,则返回 false。
  2. 如果 Type(x) 未定义,则返回 true。
  3. 如果 Type(x) 为 Null,则返回 true。
  4. 如果 Type(x) 是 Number,那么
    1. 如果 x 为 NaN,则返回 false。
    2. 如果 y 为 NaN,则返回 false。
    3. 如果 x 与 y 的数值相同,则返回 true。
    4. 如果 x 为 +0 且 y 为 -0,则返回 true。
    5. 如果 x 为 -0 且 y 为 +0,则返回 true。
    6. 返回错误。
  5. 如果Type(x)是String,那么如果x和y是完全相同的字符序列(长度相同,对应位置的字符相同),则返回true;否则,返回 false。
  6. 如果 Type(x) 是 bool 值,如果 x 和 y 都为真或都为假,则返回真;否则,返回 false。
  7. 如果 x 和 y 指的是同一个对象,则返回真。否则,返回 false。

这是它必须为 == 做的事情:

  1. 如果 Type(x) 与 Type(y) 相同,则
    1. 如果 Type(x) 未定义,则返回 true。
    2. 如果 Type(x) 为 Null,则返回 true。
    3. 如果 Type(x) 是 Number,那么
      1. 如果 x 为 NaN,则返回 false。
      2. 如果 y 为 NaN,则返回 false。
      3. 如果 x 与 y 的数值相同,则返回 true。
      4. 如果 x 为 +0 且 y 为 -0,则返回 true。
      5. 如果 x 为 -0 且 y 为 +0,则返回 true。
      6. 返回错误。
    4. 如果 Type(x) 是 String,则如果 x 和 y 是完全相同的字符序列(相同的长度和相应位置的相同字符),则返回 true。否则,返回 false。
    5. 如果 Type(x) 为 bool 值,则在 x 和 y 均为真或均为假时返回真。否则,返回 false。
    6. 如果 x 和 y 指的是同一个对象,则返回真。否则,返回 false。
  2. 如果 x 为 null 且 y 未定义,则返回 true。
  3. 如果 x 未定义且 y 为 null,则返回 true。
  4. 如果Type(x)是Number,Type(y)是String,返回比较结果x == ToNumber(y)。
  5. 如果 Type(x) 是 String 且 Type(y) 是 Number, 返回比较结果 ToNumber(x) == y。
  6. 如果 Type(x) 是 Boolean,返回 ToNumber(x) == y 的比较结果。
  7. 如果 Type(y) 是 bool 值,则返回比较结果 x == ToNumber(y)。
  8. 如果 Type(x) 是 String 或 Number 且 Type(y) 是 Object, 返回比较结果 x == ToPrimitive(y)。
  9. 如果 Type(x) 是 Object 且 Type(y) 是 String 或 Number, 返回比较结果 ToPrimitive(x) == y。
  10. 返回错误。

请注意,如果 Type(x) 等于 Type(y),则运算符会做同样的事情。但是,如果不是,则 == 可能必须进行各种转换,而 === 只会返回 false。

对于您提供的链接,所比较的类型实际上是相同的,因此两个运算符的性能应该差不多。这里的差异将基于实现细节——因为它们做不同的事情,所以可以针对不同的方式进行优化。理论上,由于 === 做的更少,人们会认为它总是会更快,但对于某些 Firefox 版本来说情况似乎并非如此,至少如果这些基准测试是准确的。

然而,see the difference if the types are different .在执行 "hi"=== {} 时,您每秒可获得约 6600 万次操作,但对于 "hi"== {},您只有约 400 万次操作/第二。

关于javascript - 为什么在 JavaScript 中 === 比 == 快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19041946/

相关文章:

javascript - 如何使用访问 token 机制在 angular.js 中重定向用户?

javascript - phonegap angularjs 条码扫描器

javascript - React/CSS - 在一列中对齐图像、按钮和文本

INSERT INTO 表 SELECT 与 COPY 的 PostgreSQL 性能

c++ - 微优化指针 + 无符号 + 1

excel - VBA 使用不等式替换

javascript - 选择 HTML 文档的所有文本

javascript - 绘制简单 SVG 路径的脚本会降低整个 PC 的速度

php - 检查单个 MySQL 记录是否存在的有效方法?

javascript - 使用 Discord.js 获取所有公会 ID