在JavaScript比较中,应该使用哪个等号运算符(== vs ===)?
内容来自 DOC[ https://q.houxu6.top/?s=在JavaScript比较中,应该使用哪个等号运算符(== vs =)?](https://q.houxu6.top/?s=在JavaScript比较中,应该使用哪个等号运算符( vs ===)?)
我正在使用JSLint来检查JavaScript代码,并且它返回了许多建议,建议在if语句中比较idSele_UNVEHtype.value.length == 0时,将==(两个等号)替换为===(三个等号)。
将==替换为===会有什么性能优势吗?
如果没有任何类型转换发生,那么与==相比是否会有性能提升?
严格相等运算符(===)的行为与抽象相等运算符(==)完全相同,除了不进行任何类型转换外,并且类型必须相同才能被认为是相等的。
参考资料:JavaScript教程:比较运算符
==运算符会在进行任何必要的类型转换后进行相等性比较。===运算符不会进行转换,因此如果两个值的类型不同,===将简单地返回false。两者的速度都很快。
引用道格拉斯·克罗克福德(Douglas Crockford)出色的《JavaScript:好东西》(JavaScript: The Good Parts),
JavaScript有两种相等运算符集:
===和!==,以及它们的邪恶双胞胎==和!=。好的运算符按照你预期的方式工作。如果两个操作数具有相同的类型和相同的值,则===产生true,!==产生false。邪恶的双胞胎在操作数具有相同的类型时起作用,但如果它们具有不同的类型,它们会尝试强制转换值。它们执行此操作的规则是复杂且难以记忆的。以下是一些有趣的情况:
'' == '0' // false
0 == '' // true
0 == '0' // true
false == 'false' // false
false == '0' // true
false == undefined // false
false == null // false
null == undefined // true
' \t\r\n ' == 0 // true
对于对象,==和===在彼此之间保持一致(除了特殊情况)。
var a = [1,2,3];
var b = [1,2,3];
var c = { x: 1, y: 2 };
var d = { x: 1, y: 2 };
var e = "text";
var f = "te" + "xt";
a == b // false
a === b // false
c == d // false
c === d // false
e == f // true
e === f // true
特殊情况是当您比较一个原始值和一个通过其toString或valueOf方法计算为相同原始值的对象时。例如,考虑使用String构造函数从字符串字面量创建字符串对象的字符串原始值的比较。
"abc" == new String("abc") // true
"abc" === new String("abc") // false
在这里,==运算符正在检查两个对象的值并返回true,但===看到它们不是同一类型并返回false。哪一个是正确的?那真的取决于你想要比较什么。我的建议是不要使用String构造函数从字符串字面量创建字符串对象。

浙公网安备 33010602011771号