内容来自 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
构造函数从字符串字面量创建字符串对象。
参考资料:https://262.ecma-international.org/5.1/#sec-11.9.3
标签:false,String,JavaScript,运算符,vs,var,true From: https://www.cnblogs.com/xiaomandujia/p/17753164.html