为什么==被认为是JavaScript中的一个不好的做法

时间:2012-10-15 11:05:28

标签: javascript

我知道使用等号运算符(==)有很多怪癖。例如,以下都是真的......

null == undefined
1 == '1'
true == 1
false == ''

在上述所有情况下,使用身份运算符(===)会返回(严格)正确答案。

但是,当我只想比较那些没有怪癖的简单事物时,为什么我不应该使用相等运算符。例如......

typeof x == 'number'
str == 'something'

所以,我的问题是;为什么平等算子具有这种贬义地位,实际上它在某些情况下是有用的。

5 个答案:

答案 0 :(得分:5)

由于名为type coercion的东西,它被认为是不好的。

这意味着JavaScript中"" == falsetrue,但"" === 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