Javascript 比较操作-语法正确吗?

Javascript 比较操作-语法正确吗?,javascript,syntax,comparison,operators,jslint,Javascript,Syntax,Comparison,Operators,Jslint,来自PHP,我理解在比较操作中使用==和===的区别,但是对于JavaScript,使用==或===是可以接受的吗 我想验证我的JavaScript代码并找到它。在使用JSLint运行验证时,我看到了这些类型的消息 一些例子: var show = $('input[name=female]:checked').val() == "true"; 第278行出现问题字符70:应为“!=”而是看到了“!=” 及 第283行出现问题字符38:应为“!=”而是看到了“!=” 所以我的问题是,使

来自PHP,我理解在比较操作中使用==和===的区别,但是对于JavaScript,使用==或===是可以接受的吗

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

一些例子:

var show = $('input[name=female]:checked').val() == "true";
  • 第278行出现问题字符70:应为“!=”而是看到了“!=”

  • 第283行出现问题字符38:应为“!=”而是看到了“!=”
所以我的问题是,使用==或!=的当前语法有效/正确,或者我需要使用===和!==


编辑:只是要指出代码确实有效,==语法是有效的,但在某些情况下,它可能会在大型项目中导致相当严重的错误。如果您没有使用==的好理由,那么默认情况下应该使用==编写JavaScript,因为它会检查您知道的类型


这两种方法都可以,但是如果您默认为===,您将在将来避免痛苦。

这在某种程度上是正确的,但是JSLint希望通过严格的比较来防止类型转换出现问题

只有在您真正需要的地方(因为您出于某种原因希望使用类型转换),才始终使用严格比较和“正常”比较是一种很好的做法

来自JSLint的:

==和=
==
=运算符不键入
比较前的强迫。这很糟糕
因为它导致
'\t\r\n'==0
是
真的
。这可能会掩盖类型错误

如果你只关心一个值是 truthy或falsy,然后使用简短的 形式。而不是

(foo != 0)
就说

(foo)
而不是

(foo == 0)

(!foo)
始终使用
==
==
接线员


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

视情况而定

===通常是首选,因为您不会有任何可能没有考虑到的误报(在某些实现中,它可能会稍微快一点,因为它的潜在值较低,尽管我没有检查过,只是想一想,而且速度差可以忽略不计)


==通常更方便地覆盖许多/所有情况(如果我没有弄错的话,jQuery不会通过JSLint,因为在某些地方,代码故意使用==覆盖大量情况,而不是单独测试每一个情况)。

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


<> P> >习惯地使用<代码>===/COD>还有一个合理的点,即不必考虑使用哪一个操作符,但坦率地说,我更喜欢被迫考虑我比较的两个操作数的所有可能值,并且发现JSLLET不必要的nnutuin。

这不是语法错误,但可能是语义含糊。将此添加到我的vocab“语义模糊性”+1感谢中,我还想询问jQuery是否也通过了验证如果两个操作数的类型相同,则指定
==
==
执行完全相同的步骤,因此排除浏览器实现的异常,无论哪种方式都不会有性能优势。@Tim,这是我的观点,如果它们不是同一类型===可以通过立即返回false来执行更快的性能,而==将执行类型转换。这很可能是真的,但是你的答案中的这一部分是模糊的,似乎暗示
==
可能总是更快。关于换行符/制表符速记字符的好提示“JSLint不必要地保姆”
(!foo)