3

我知道等式运算符 ( ) 有很多怪癖==。例如,以下都是正确的......

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

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

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

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

所以,我的问题是;为什么相等运算符具有如此贬义的地位,而实际上它在某些情况下很有用。

4

5 回答 5

6

由于称为类型强制的东西,它被认为是不好的。

这意味着它"" == falsetrueJavaScript 中,但"" === false不是。

可能是你想要的,但可能不是。

说这总是不好的做法是一个笼统的说法。如果您不知道它的作用和含义,那就太糟糕了。

于 2012-10-15T11:08:12.650 回答
3

==当操作数保证是同一类型时,使用绝对没有错。当操作数属于同一类型时,指定执行与 完全相同的步骤===。一个很好的例子是使用typeof.

在这种情况下不受欢迎的原因==纯粹是风格上的。论点是,如果始终一致地使用代码,则代码更易于阅读===,而不必考虑使用==. 其中很多起源于 Douglas Crockford,并通过他的JSLint工具得以延续。

于 2012-10-15T11:17:12.797 回答
0

只有一个例外,当返回类型是固定的。

与相同类型比较时,使用 == 不会发生类型约定。

例如,typeof总是返回字符串,

所以你可以使用typeof func == 'function'而不是typeof func === 'function'没有伤害。(这样可以节省一个字节。)

于 2012-10-15T11:11:20.043 回答
0

如果您同时使用两者,那么迟早您会犯错误并==在不应该使用的情况下使用。更不用说决定是否应该使用=====在每种情况下使用所需的额外大脑周期。坚持===和忘记==更不容易出错,也少了一件需要记住的事情。

于 2012-10-15T11:14:23.660 回答
0

我还应该补充一点,如果您知道双等号的作用,则可能存在首选双等号的情况。F.ex 如果您需要无效"0"0同样:

function validate(input) {
    return input == false;
}

validate(0); // false
validate("0") // false
于 2012-10-15T11:34:09.113 回答