我使用JSLint通过JavaScript,它返回了许多建议,以取代 ==(两个平等的标志)与 ===(三个平等的标志)当做一些事情,如比较idSele_UNVEHtype.value.length == 0在一个假设声明。
能否取代 = = = = = = =?
任何性能改进都将被欢迎,因为有许多比较运营商。
如果没有类型转换发生,会有超越 ==的性能收益吗?
我使用JSLint通过JavaScript,它返回了许多建议,以取代 ==(两个平等的标志)与 ===(三个平等的标志)当做一些事情,如比较idSele_UNVEHtype.value.length == 0在一个假设声明。
能否取代 = = = = = = =?
任何性能改进都将被欢迎,因为有许多比较运营商。
如果没有类型转换发生,会有超越 ==的性能收益吗?
当前回答
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
其他回答
从核心JavaScript参考
=== 返回是真实的,如果操作员是严格平等的(见上)没有类型转换。
首先,一些关于JavaScript行方程式的术语:双方程式正式称为抽象平等比较运营商,而三方程式则称为严格平等比较运营商。
console.log(3 == "3"); // true
console.log(3 === "3"); // false.
console.log(3 == "3"); // true
console.log(3 === "3"); // false.
使用兩個平等的標誌返回真實,因為字符串“3”在比較之前轉換為3號。
console.log(true == '1'); // true
console.log(true === '1'); // false
console.log(true == '1'); // true
console.log(true === '1'); // false
再一次,抽象的平等比较进行类型转换,在这种情况下,两者都是真实的和“1”字符串转换为1号,结果是真实的。
如果你明白你正好在你的道路上区分 ==和 ===. 但是,有一些场景,其中这些运营商的行为是不直觉的。
console.log(undefined == null); // true
console.log(undefined === null); // false. Undefined and null are distinct types and are not interchangeable.
console.log(undefined == null); // true
console.log(undefined === null); // false. Undefined and null are distinct types and are not interchangeable.
console.log(true == 'true'); // false. A string will not be converted to a boolean and vice versa.
console.log(true === 'true'); // false
console.log(true == 'true'); // false. A string will not be converted to a boolean and vice versa.
console.log(true === 'true'); // false
下面的例子是有趣的,因为它描述了字符串与字符串对象不同。
console.log("This is a string." == new String("This is a string.")); // true
console.log("This is a string." === new String("This is a string.")); // false
console.log("This is a string." == new String("This is a string.")); // true
console.log("This is a string." === new String("This is a string.")); // false
使用 = = 运营商(平等)
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 的弱平等比较有某种混乱的行为,并且往往是混乱的错误的来源。 解决方案是使用严格的平等运营商,由三个平等标志组成: ===. 它就像正常的平等运营商一样工作,但没有任何类型的强迫。
如果你经常转换到和从咖啡脚本,你应该只使用 ===。
CoffeeScript 解决了这一点,简单地将所有弱的比较与严格的比较相替代,换句话说,将所有 ==比较器转换为 ===. 在 CoffeeScript 中,你不能进行弱的平等比较,并且在需要时比较之前,你应该明确地转换类型。
“我要在JavaScript比较中使用 ==或 ===”的辩论是相同或类似于一个问题:“我要用一个“<unk>”或一个“<unk>”吃。
这个问题的唯一合理答案是:
您应该使用动态类型比较,例如:==为空白类型比较,您应该使用静态类型比较,例如:===为强大的类型比较。
这是因为他们不是相同的,他们没有相同的目的,并且不应该用于相同的目的。
當然,兩個「<unk>」和「<unk>」都是用於「吃」的,但你會選擇根據你所服用的食物使用它們。