我使用JSLint通过JavaScript,它返回了许多建议,以取代 ==(两个平等的标志)与 ===(三个平等的标志)当做一些事情,如比较idSele_UNVEHtype.value.length == 0在一个假设声明。
能否取代 = = = = = = =?
任何性能改进都将被欢迎,因为有许多比较运营商。
如果没有类型转换发生,会有超越 ==的性能收益吗?
我使用JSLint通过JavaScript,它返回了许多建议,以取代 ==(两个平等的标志)与 ===(三个平等的标志)当做一些事情,如比较idSele_UNVEHtype.value.length == 0在一个假设声明。
能否取代 = = = = = = =?
任何性能改进都将被欢迎,因为有许多比较运营商。
如果没有类型转换发生,会有超越 ==的性能收益吗?
当前回答
总是使用“===”并且你会避免成千上万的错误. 如今使用三重平等是由不同的风格指南更受欢迎,因为它比较考虑到类型的歌手。
其他回答
一个简单的例子是
2 == '2' -> true, values are SAME because of type conversion.
2 === '2' -> false, values are NOT SAME because of no type conversion.
JavaScript 是虚拟的,就像 PHP 一样。
var x = "20";
var y =20;
if (x===y) // false
这将总是给你一个假的,因为尽管变量的值是相同的,数据类型是不一样的。
一个是,另一个是。
If(x==y)//true
但是,这只是检查内容是否相同,无论数据类型如何。
我不想说值是平等的,因为一个序列值不能与 int 值平等。
* 主持人 === vs == *
1 == true => true
true == true => true
1 === true => false
true === true => true
如果您正在创建一个网页应用程序或安全的页面,您应该始终使用(只有在可能的情况下)
===
因为它会检查它是否是相同的内容,是否是相同的类型!
当有人进来时:
var check = 1;
if(check == '1') {
//someone continued with a string instead of number, most of the time useless for your webapp, most of the time entered by a user who does not now what he is doing (this will sometimes let your app crash), or even worse it is a hacker searching for weaknesses in your webapp!
}
但与
var check = 1;
if(check === 1) {
//some continued with a number (no string) for your script
} else {
alert('please enter a real number');
}
黑客将永远不会深入到系统中找到错误并攻击您的应用程序或用户
我的观点是,
===
将为您的脚本添加更多安全性
当然,你也可以检查输入的号码是否有效,是行,等等等,如果在第一例内的声明,但这至少对我来说更容易理解和使用。
我发布的原因是“更安全”或“安全”这个词从未在这个对话中说过(如果你看 iCloud.com 它使用 2019 次 === 和 1308 次 ==,这也意味着你有时会使用 == 而不是 === 因为它否则会阻止你的功能,但正如你说的那样,你应该使用 === 尽可能多)
原因在上面的答案中被解释,而且杜格拉斯·克罗克福德也对此非常清楚(JavaScript:The Good Parts)。
但是,有一個例外: == null 是檢查“是零或不定義”的有效方式:
if( value == null ){
// value is either null or undefined
}
例如,jQuery 1.9.1 使用此模式 43 次,而 JSHint 合成检查器甚至为此提供 eqnull 放松选项。
从 jQuery 风格指南:
严格的平等检查(===)应用于对 ==的支持,唯一的例外是通过零来检查非定义和零。
// Check for both undefined and null values, for some important reason.
undefOrNull == null;
编辑 2021-03:
如今,大多数浏览器支持 Nullish coalescing 操作器(??) 和 Logical nullish 任务(??=),如果变量是 null 或 undefined,例如:
if (a.speed == null) {
// Set default if null or undefined
a.speed = 42;
}
可以用任何形式写作。
a.speed ??= 42;
a.speed ?? a.speed = 42;
a.speed = a.speed ?? 42;