我使用JSLint通过JavaScript,它返回了许多建议,以取代 ==(两个平等的标志)与 ===(三个平等的标志)当做一些事情,如比较idSele_UNVEHtype.value.length == 0在一个假设声明。
能否取代 = = = = = = =?
任何性能改进都将被欢迎,因为有许多比较运营商。
如果没有类型转换发生,会有超越 ==的性能收益吗?
我使用JSLint通过JavaScript,它返回了许多建议,以取代 ==(两个平等的标志)与 ===(三个平等的标志)当做一些事情,如比较idSele_UNVEHtype.value.length == 0在一个假设声明。
能否取代 = = = = = = =?
任何性能改进都将被欢迎,因为有许多比较运营商。
如果没有类型转换发生,会有超越 ==的性能收益吗?
当前回答
原因在上面的答案中被解释,而且杜格拉斯·克罗克福德也对此非常清楚(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;
其他回答
操作员 = = = = = = = = = = = = = = = = = = = = = = = = = = =
此分類上一篇
缺乏过渡性是令人担忧的,我的建议是永远不要使用邪恶的双胞胎,相反,总是使用 === 和!== 所有仅仅显示的比较都是与 === 运营商虚假的。
更新:
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
"abc" == new String("abc") // true
"abc" === new String("abc") // false
在这里 ==运营商正在检查两个对象的值,并返回真实,但 ===看到它们不是相同的类型,并返回虚假。 哪一个是正确的? 这真的取决于你正在试图比较什么。
参考 http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3
我在Firefox使用Firebug测试了此类代码:
console.time(“testEquality”); var n = 0; while (true) { n++; if (n == 100000) break; } console.timeEnd(“testEquality”);
和
console.time(“testTypeEquality”); var n = 0; while (true) { n++; if (n === 100000) break; } console.timeEnd(“testTypeEquality”);
我的结果(每次测试5次,平均):
==: 115.2
===: 114.4
所以我会说小差异(这是超过100000 iterations,记住)是不可忽视的。 性能不是一个理由做 ===. 类型安全(好,安全,你会得到在JavaScript),和代码质量是。
无,无,无,无,无,无。
var a;
var b = null;
在这里, a 和 b 没有值. 因为, 0 是虚假的和 '' 都是值. 其中的一件常见的是,它们都是虚假的值,这意味着它们都满足虚假的条件。
因此, 0 虚假和 '' 一起形成一个子组. 另一方面, null 和 undefined 形成第二个子组. 查看下图中的比较. null 和 undefined 将是相同的. 其他 3 将是相同的。
此分類上一篇
這是相同的任何物體(如 {}, arrys,等),不空的線 & Boolean 真實是所有真實的條件. 但,他們都不是平等。
使用 = = 运营商(平等)
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 是一个弱点编写的语言,即没有任何数据类型,如在 C、c++ 例如 int、boolean、 float 等,因此一个变量可以持有任何类型的值,这就是为什么这些特殊的比较操作员在那里。
艾格
var i = 20;var j = "20";
如果我们应用比较运营商,这些变量结果将是
i==j //result is true
或
j != i//result is false
为此,我们需要一个特殊的比较运营商,检查值以及变量的数据类型。
如果我们做
i===j //result is false