Welcher Gleichheitsoperator (== vs. ===) sollte in JavaScript-Vergleichen verwendet werden?
P粉023650014
2023-08-23 12:29:52
<p>Ich verwende JSLint, um JavaScript zu erkunden, und es gibt viele Vorschläge zurück, um <code>==</code> (zwei Gleichheitszeichen) durch <code>===</code> zu ersetzen Gleichheitszeichen) beim Ausführen von Operationen wie dem Vergleich von <code>idSele_UNVEHtype.value.length == 0</code> innerhalb einer <code>if</code> </p>
<p>Gibt es einen Leistungsvorteil, wenn man <code>==</code> durch <code>===</code> ersetzt? </p>
<p>Jede Leistungsverbesserung wäre willkommen, da es viele Vergleichsoperatoren gibt. </p>
<p>Wird es einen Leistungsgewinn gegenüber <code>==</code> geben? </p>
使用
==
运算符(相等)使用
===
运算符(Identity)这是因为相等运算符
==
会进行类型强制转换,这意味着解释器会在比较之前隐式尝试转换值。另一方面,恒等运算符
===
不会进行类型强制,因此在比较时不会转换值。严格相等运算符 (
===
) 的行为与抽象相等运算符 (==
) 相同,只是不进行类型转换,并且类型必须是相同的被认为是平等的。参考:JavaScript 教程:比较运算符
==
运算符将在进行任何必要的类型转换后比较是否相等。===
运算符不会进行转换,因此如果两个值不是同一类型,===
将简单地返回假
。两者都同样快。引用 Douglas Crockford 的精彩JavaScript:好的部分一个>,
更新
@Casebash 在评论和@Phillipe Laybaert 的 关于对象的答案。对于对象,
==
和===
彼此行为一致(特殊情况除外)。特殊情况是当您将一个基元与一个计算结果为相同基元的对象进行比较时,由于其
toString
或valueOf
方法。例如,考虑将字符串基元与使用String
构造函数创建的字符串对象进行比较。这里
==
运算符检查两个对象的值并返回true
,但是===
看到它们类型不同并返回false
。哪一个是正确的?这实际上取决于您要比较的内容。我的建议是完全绕过这个问题,只是不要使用String
构造函数从字符串文字创建字符串对象。参考
https://262.ecma-international.org/5.1/#sec-11.9 .3