JSLint预期'===',而是看到'=='

最近,当我提出这个错误时,我通过JSLint运行了一些我的代码。 我认为这个错误是有趣的,但它是自动假定所有==应===。

这真的有意义吗? 我可以看到很多不想比较types的实例,我担心这实际上会导致问题。

“预期”这个词意味着这个应该每一次都要做……这对我来说是没有意义的。

国际海事组织,盲目地使用=== ,而没有试图了解如何types转换工作没有多大意义。

等号运算符==的主要担心是比较规则取决于所比较的types可以使运算符不可传递,例如,如果:

 A == B AND B == C 

并不能保证:

 A == C 

例如:

 '0' == 0; // true 0 == ''; // true '0' == ''; // false 

在比较相同types的值时,严格等于运算符===并不是真的有必要,最常见的例子是:

 if (typeof foo == "function") { //.. } 

我们把总是一个stringtypeof运算符的结果与一个string文字进行比较…

或者,当你知道types强制规则时,例如,检查是否为nullundefined东西:

 if (foo == null) { // foo is null or undefined } // Vs. the following non-sense version: if (foo === null || typeof foo === "undefined") { // foo is null or undefined } 

JSLint本质上比Javascript语法所允许的更具防御性。

从JSLint文档:

==!=运算符在比较之前input强制types。 这是不好的,因为它会导致' \t\r\n' == 0为真。 这可以掩盖types错误。

与以下任何值进行比较时,请使用===!==运算符(不要执行types强制转换): 0 '' undefined null false true

如果你只关心某个值是真的还是虚假的 ,那就用简写的forms。 代替

(foo != 0)

说啊

(foo)

而不是

(foo == 0)

(!foo)

===!==运算符是首选。

请记住,JSLint强制一个人应该是什么好的JavaScript的想法。 在实施所build议的更改时,您仍然需要使用常识。

一般来说,比较types和值将会使你的代码更安全(当你的types转换不符合你的想法时,你将不会遇到意外的行为)。

三等于不等于双等同,因为除了检查双方是否是相同的值之外,三等于还检查它们是相同的数据types。

所以("4" == 4)是真的,而("4" === 4)是假的。

三重平等也运行得稍微快一点,因为在给出答案之前,JavaScript不必浪费时间进行任何types的转换。

JSLint的目的是为了尽可能严格地制作JavaScript代码,以减less不明确的错误。 它强调了这样的事情,试图让你以强制你尊重数据types的方式进行编码。

但是JSLint的好处在于它只是一个指导。 就像他们在网站上说的那样,即使你是一个很好的JavaScript程序员,也会伤害你的感觉。 但是你不应该觉得有必要听从它的build议。 如果你已经阅读了它的内容并且理解了它,但是你确定你的代码不会被破坏,那么你就没有强迫你改变任何东西。

你甚至可以告诉JSLint忽略检查类别,如果你不想被轰炸警告你不会做任何事情。

来自http://javascript.crockford.com/code.html的引用:;

===和!==运营商。

使用===和!==运算符几乎总是更好。 ==和!=运算符types强制。 特别是,不要使用==与falsy值进行比较。

JSLint是非常严格的,他们的“webjslint.js”甚至不通过他们自己的validation。

那么它不能真正引起问题,只是给你build议。 要么接受,要么离开它。 这就是说,我不确定它有多聪明。 可能有其中没有提出这个问题的背景。

如果你想testing虚假。 JSLint不允许

 if (foo == null) 

但确实允许

 if (!foo) 

为了帮助解释这个问题,并解释了为什么NetBeans(from)7.3已经开始显示这个警告,这是NetBeans错误跟踪器响应摘录,当有人报告这是一个错误:

在JavaScript中使用===而不是==是个好习惯。

==和!=运算符在比较之前input强制types。 这是不好的,因为它会导致'\ t \ r \ n'== 0为真。 这可以掩盖types错误。 JSLint不能可靠地确定==是否正确使用,因此最好不要使用==和!=,而应始终使用更可靠的===和!==运算符。

参考