<分区>
查看这些测试:
这是 javascript 必须为 ===
做的事情:
- 如果 Type(x) 与 Type(y) 不同,则返回 false。
- 如果 Type(x) 未定义,则返回 true。
- 如果 Type(x) 为 Null,则返回 true。
- 如果 Type(x) 是 Number,那么
- 如果 x 为 NaN,则返回 false。
- 如果 y 为 NaN,则返回 false。
- 如果 x 与 y 的数值相同,则返回 true。
- 如果 x 为 +0 且 y 为 -0,则返回 true。
- 如果 x 为 -0 且 y 为 +0,则返回 true。
- 返回错误。
- 如果Type(x)是String,那么如果x和y是完全相同的字符序列(长度相同,对应位置的字符相同),则返回true;否则,返回 false。
- 如果 Type(x) 是 bool 值,如果 x 和 y 都为真或都为假,则返回真;否则,返回 false。
- 如果 x 和 y 指的是同一个对象,则返回真。否则,返回 false。
这是它必须为 ==
做的事情:
- 如果 Type(x) 与 Type(y) 相同,则
- 如果 Type(x) 未定义,则返回 true。
- 如果 Type(x) 为 Null,则返回 true。
- 如果 Type(x) 是 Number,那么
- 如果 x 为 NaN,则返回 false。
- 如果 y 为 NaN,则返回 false。
- 如果 x 与 y 的数值相同,则返回 true。
- 如果 x 为 +0 且 y 为 -0,则返回 true。
- 如果 x 为 -0 且 y 为 +0,则返回 true。
- 返回错误。
- 如果 Type(x) 是 String,则如果 x 和 y 是完全相同的字符序列(相同的长度和相应位置的相同字符),则返回 true。否则,返回 false。
- 如果 Type(x) 为 bool 值,则在 x 和 y 均为真或均为假时返回真。否则,返回 false。
- 如果 x 和 y 指的是同一个对象,则返回真。否则,返回 false。
- 如果 x 为 null 且 y 未定义,则返回 true。
- 如果 x 未定义且 y 为 null,则返回 true。
- 如果Type(x)是Number,Type(y)是String,返回比较结果x == ToNumber(y)。
- 如果 Type(x) 是 String 且 Type(y) 是 Number,
返回比较结果 ToNumber(x) == y。
- 如果 Type(x) 是 Boolean,返回 ToNumber(x) == y 的比较结果。
- 如果 Type(y) 是 bool 值,则返回比较结果 x == ToNumber(y)。
- 如果 Type(x) 是 String 或 Number 且 Type(y) 是 Object,
返回比较结果 x == ToPrimitive(y)。
- 如果 Type(x) 是 Object 且 Type(y) 是 String 或 Number,
返回比较结果 ToPrimitive(x) == y。
- 返回错误。
请注意,如果 Type(x)
等于 Type(y)
,则运算符会做同样的事情。但是,如果不是,则 ==
可能必须进行各种转换,而 ===
只会返回 false。
对于您提供的链接,所比较的类型实际上是相同的,因此两个运算符的性能应该差不多。这里的差异将基于实现细节——因为它们做不同的事情,所以可以针对不同的方式进行优化。理论上,由于 ===
做的更少,人们会认为它总是会更快,但对于某些 Firefox 版本来说情况似乎并非如此,至少如果这些基准测试是准确的。
然而,see the difference if the types are different .在执行 "hi"=== {}
时,您每秒可获得约 6600 万次操作,但对于 "hi"== {}
,您只有约 400 万次操作/第二。