Javascript 比较操作-语法正确吗?
来自PHP,我理解在比较操作中使用==和===的区别,但是对于JavaScript,使用==或===是可以接受的吗 我想验证我的JavaScript代码并找到它。在使用JSLint运行验证时,我看到了这些类型的消息 一些例子: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:应为“!=”而是看到了“!=” 所以我的问题是,使
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)