我使用JSLint通过JavaScript,它返回了许多建议,以取代 ==(两个平等的标志)与 ===(三个平等的标志)当做一些事情,如比较idSele_UNVEHtype.value.length == 0在一个假设声明。
能否取代 = = = = = = =?
任何性能改进都将被欢迎,因为有许多比较运营商。
如果没有类型转换发生,会有超越 ==的性能收益吗?
我使用JSLint通过JavaScript,它返回了许多建议,以取代 ==(两个平等的标志)与 ===(三个平等的标志)当做一些事情,如比较idSele_UNVEHtype.value.length == 0在一个假设声明。
能否取代 = = = = = = =?
任何性能改进都将被欢迎,因为有许多比较运营商。
如果没有类型转换发生,会有超越 ==的性能收益吗?
当前回答
使用一个未提到的理由 === - 是你与 / 交叉编写到 / 从咖啡脚本共存的情况。
JavaScript 的弱平等比较有某种混乱的行为,并且往往是混乱的错误的来源。 解决方案是使用严格的平等运营商,由三个平等标志组成: ===. 它就像正常的平等运营商一样工作,但没有任何类型的强迫。
如果你经常转换到和从咖啡脚本,你应该只使用 ===。
CoffeeScript 解决了这一点,简单地将所有弱的比较与严格的比较相替代,换句话说,将所有 ==比较器转换为 ===. 在 CoffeeScript 中,你不能进行弱的平等比较,并且在需要时比较之前,你应该明确地转换类型。
其他回答
操作员称为严格的比较操作员,与操作员不同。
将采取2 vars a 和 b。
对于“a = = b”来评估为真实的 a 和 b 必须是相同的值。
在“a === b”的情况下,a 和 b 必须是相同的值,也必须是相同的类型,以便它被评估为真实。
接下来的例子
var a = 1;
var b = "1";
if (a == b) //evaluates to true as a and b are both 1
{
alert("a == b");
}
if (a === b) //evaluates to false as a is not the same type as b
{
alert("a === b");
}
简而言之,使用 == 操作员可能会在您不希望使用 === 操作员这样做的情况下评估为真实。
在90%的使用场景中,不管你使用哪个,但当你有一天得到一些意想不到的行为时,知道差异是有用的。
在JavaScript中,它具有相同的值和类型。
例如,
4 == "4" // will return true
但
4 === "4" // will return false
操作员 = = = = = = = = = = = = = = = = = = = = = = = = = = =
此分類上一篇
缺乏过渡性是令人担忧的,我的建议是永远不要使用邪恶的双胞胎,相反,总是使用 === 和!== 所有仅仅显示的比较都是与 === 运营商虚假的。
更新:
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
var a = new String("123");
var b = "123";
alert(a === b); // returns false !! (but they are equal and of the same type)
看到这一点在一个答案. a 和 b 不是真正相同的类型在这种情况下,如果你检查 tipof(a) 你会得到“对象” 和 tipof(b) 是“紧张”。
JavaScript 是虚拟的,就像 PHP 一样。
var x = "20";
var y =20;
if (x===y) // false
这将总是给你一个假的,因为尽管变量的值是相同的,数据类型是不一样的。
一个是,另一个是。
If(x==y)//true
但是,这只是检查内容是否相同,无论数据类型如何。
我不想说值是平等的,因为一个序列值不能与 int 值平等。