我知道使用等号运算符(==
)有很多怪癖。例如,以下都是真的......
null == undefined
1 == '1'
true == 1
false == ''
在上述所有情况下,使用身份运算符(===
)会返回(严格)正确答案。
但是,当我只想比较那些没有怪癖的简单事物时,为什么我不应该使用相等运算符。例如......
typeof x == 'number'
str == 'something'
所以,我的问题是;为什么平等算子具有这种贬义地位,实际上它在某些情况下是有用的。
答案 0 :(得分:5)
由于名为type coercion的东西,它被认为是不好的。
这意味着JavaScript中"" == false
为true
,但"" === false
不是。{/ p>
可能是你想要的,但可能不是。
说这是总是糟糕的做法是一个彻底的陈述。如果您不知道它的作用和意义,那就坏。
答案 1 :(得分:3)
当操作数保证属于同一类型时,使用==
绝对没有错。当操作数具有相同类型时,指定它执行与===
完全相同的步骤。一个很好的例子是使用typeof
。
==
在这种情况下不赞成的原因纯粹是文体。如果===
始终使用==
而不必考虑使用{{1}}的含义,则可以更容易阅读代码。其中很多都源于道格拉斯·克罗克福德,并且由JSLint工具延续下去。
答案 2 :(得分:0)
仅在一个例外情况下修复返回类型。
与相同类型进行比较时,使用==不会发生类型约定。
例如,typeof
始终返回字符串
因此您可以使用typeof func == 'function'
代替typeof func === 'function'
而不会造成任何伤害。 (这保存了你的一个字节。)
答案 3 :(得分:0)
如果您同时使用两者,那么您将犯错,并在您不应该使用的情况下使用==
。更不用说决定在每种情况下是否应该使用===
或==
所需的额外脑循环。坚持===
并忘记==
不容易出错,而且要记住一点。
答案 4 :(得分:0)
我还应该补充一点,如果你知道它的作用,可能会出现双等号的情况。 F.ex如果您需要同等地使"0"
和0
无效:
function validate(input) {
return input == false;
}
validate(0); // false
validate("0") // false