84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
我正在使用 JSLint 来浏览 JavaScript,它返回许多建议,将 == (两个等号)替换为 === (三个等号)在执行诸如在 if 语句内比较 idSele_UNVEHtype.value.length == 0 等操作时。
==
===
if
idSele_UNVEHtype.value.length == 0
将 == 替换为 === 是否有性能优势?
任何性能改进都会受到欢迎,因为存在许多比较运算符。
如果不进行类型转换,是否会比 == 获得性能提升?
true == 1; //true, because 'true' is converted to 1 and then compared "2" == 2; //true, because "2" is converted to 2 and then compared
true === 1; //false "2" === 2; //false
这是因为相等运算符==会进行类型强制转换,这意味着解释器会在比较之前隐式尝试转换值。
另一方面,恒等运算符===不会进行类型强制,因此在比较时不会转换值。
严格相等运算符 (===) 的行为与抽象相等运算符 (==) 相同,只是不进行类型转换,并且类型必须是相同的被认为是平等的。
参考:JavaScript 教程:比较运算符
==运算符将在进行任何必要的类型转换后比较是否相等。===运算符不会进行转换,因此如果两个值不是同一类型,===将简单地返回假。两者都同样快。
假
引用 Douglas Crockford 的精彩JavaScript:好的部分一个>,
@Casebash在评论和@Phillipe Laybaert 的关于对象的答案。对于对象,==和===彼此行为一致(特殊情况除外)。
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构造函数创建的字符串对象进行比较。
toString
valueOf
String
"abc" == new String("abc") // true "abc" === new String("abc") // false
这里==运算符检查两个对象的值并返回true,但是===看到它们类型不同并返回false。哪一个是正确的?这实际上取决于您要比较的内容。我的建议是完全绕过这个问题,只是不要使用String构造函数从字符串文字创建字符串对象。
true
false
参考https://262.ecma-international.org/5.1/#sec-11.9 .3
使用
==
运算符(相等)使用
===
运算符(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