比较操作 - 正确的语法?

时间:2011-03-30 14:03:35

标签: javascript syntax comparison operators jslint

来自PHP我理解在比较操作中使用== verses ===的区别,但使用JavaScript是否可以使用==或===?

我想验证我的JavaScript代码并找到JSLint。在使用JSLint运行验证时,我看到了这些类型的消息。

一些例子:

var show = $('input[name=female]:checked').val() == "true";
  • 第278行问题70:预期'!=='而是看到'!='。

var show = $('input[name=living]:checked').val() != "false";
  • 第283行问题38:预期'!=='而是看到'!='。

所以我的问题是,使用==或!=的当前语法是有效/正确还是我需要使用===和!==?

编辑:只是指出代码确实有效

5 个答案:

答案 0 :(得分:5)

在某种程度上它是正确的,但JSLint期望严格比较以防止类型转换出现问题。

优良作法是始终只在您真正需要/想要它的地方使用严格比较和“正常”比较(因为您出于某种原因想要使用类型转换)。

来自JSLint的documentation

  

==和!=

     

==!=运算符会输入   比较之前的强制。这是不好的   因为它导致' \t\r\n' == 0   是true。这可以掩盖类型错误。

     

如果你只关心一个值    truthy falsy ,然后使用短片   形成。而不是

(foo != 0)
     

只是说

(foo)
     

而不是

(foo == 0)
     

(!foo)
     

始终使用===!==   运算符。

答案 1 :(得分:2)

Crockford和JSLint在这一点上有点教条,我认为过度规范。对于没有经验的JavaScript开发人员来说,始终使用===而不是==是合理的经验法则,但如果您了解基本规则,那么使用==就没有问题。特别是,如果保证两个操作数具有相同的类型(例如typeof之类的typeof foo == "undefined"比较),则指定两个操作符完全遵循相同的步骤。

还有一个合理的观点,即习惯性地使用===无需考虑使用哪个运算符,但坦率地说,我更倾向于考虑我正在比较的两个操作数的所有可能值。找到JSLint不必要的保姆。

答案 2 :(得分:1)

==语法是有效的,但在某些情况下,它可能导致大型项目中相当讨厌的错误。如果你没有充分的理由使用==你应该默认使用===编写JavaScript,因为它会检查你知道的类型。

无论哪种方式都有效,但如果您默认为===,那么将来可以避免痛苦。

答案 3 :(得分:1)

取决于具体情况。

===通常是首选,因为你不会有任何你可能没有考虑过的误报(在某些实现中它可能会稍微快一点,因为它与较小的潜在值相比,尽管我没有检查过,只是一个想法,速度差异可以忽略不计。)

==通常更方便覆盖很多/所有情况(如果我没有弄错,jQuery不会传递JSLint,因为在某些地方代码故意使用==来覆盖大量案例而不是测试每个案例个别地)。

答案 4 :(得分:0)

你可以只做==和!=,我不认为会有任何问题。