来自PHP我理解在比较操作中使用== verses ===的区别,但使用JavaScript是否可以使用==或===?
我想验证我的JavaScript代码并找到JSLint。在使用JSLint运行验证时,我看到了这些类型的消息。
一些例子:
var show = $('input[name=female]:checked').val() == "true";
和
var show = $('input[name=living]:checked').val() != "false";
所以我的问题是,使用==或!=的当前语法是有效/正确还是我需要使用===和!==?
编辑:只是指出代码确实有效
答案 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)
你可以只做==和!=,我不认为会有任何问题。