为什么在JavaScript中允许这些是错误的想法==,!=,++, -

时间:2010-07-28 21:45:26

标签: javascript operators

我正在查看JSLint,其中一些规则激起了我的兴趣。特别是:

  

禁止==和!=

     

禁止++和 -

为什么禁止这些是不错的主意?我理解第一部分,基本上它要我===而不是==我不明白为什么我理解两者之间的区别,我只是想知道为什么这是不好的做法。有时候我真的想以==为例,以便对undefined == null

评估为真

第二个,我根本不明白。它是否要我做myInt + = 1而不是myInt ++?

谢谢!

7 个答案:

答案 0 :(得分:12)

我对这些规则不太满意,而不是阻止使用==,我建议学习关于类型强制。

Crockford为什么要避免==的主要原因是,取决于操作数类型的比较规则可以使此运算符不可传递,例如,如果: / p>

A == B AND
B == C

不保证:

A == C

一个真实的例子:

'0' == 0; // true
 0 == '';   // true
'0' == ''; // false

在比较相同类型的值时,并不一定需要严格的===运算符,例如:

 if (typeof foo == "function") { }

我们将typeof运算符(总是一个字符串)的结果与字符串文字进行比较......

另一个例子,当您将某些内容与null进行比较时,==也会与undefined进行比较,例如:

if (something == null) {}

VS

if (something === null || typeof something === "undefined") {}

以上两个条件最后是相同的,但第一个条件更具可读性,当然,如果您了解类型强制以及==的行为方式。

了解==运算符的工作原理,可以帮助您明智地决定使用哪个运算符。

推荐文章:

答案 1 :(得分:10)

Doug Crockford对Javascript中的“好”和“坏”有自己的看法。因此,JSLint实现了这些检查,但如果您不完全同意,则将它们作为可选项。

禁止==有助于防止您在真正意图===时犯错误。当然,这假设您从未真正想要使用==

禁止++--是一种风格,有些人认为它比+= 1-= 1更难阅读。

答案 2 :(得分:4)

道格拉斯·克罗克福德(编写JSLint的人)在这段视频中解释了自己:

http://www.youtube.com/watch?v=hQVTIJBZook#t=14m45s

但基本上(正如其他人提到的那样)是因为强制类型。

值得一看真实的视频 - 非常有趣和有用。

答案 3 :(得分:3)

来自instructions

  

==和!=运算符在比较之前输入强制。这很糟糕,因为它导致'\ t \ r \ n'== 0为真。这可以掩盖类型错误。

  

已知++(增量)和 - (减量)运算符通过鼓励过多的特技来导致错误的代码。它们仅次于故障架构,可以实现病毒和其他安全威胁。有一个加号选项禁止使用这些运算符。

答案 4 :(得分:2)

如果需要,==!=运算符会隐式转换运算符,而===!==运算符则不会。例如,表达式4 == '4'将为true,而表达式4 === '4'将为false。

您最好知道正在处理的数据类型,以便在代码中进行正确的比较。

++--运算符如果在语句中单独使用它们不会导致任何问题,但它们通常用于生成一个语句,该语句在不是这样的情况下执行多个操作显而易见的方式,如:

arr[++idx] = 42;

更清楚如下:

idx += 1;
arr[idx] = 42;

答案 5 :(得分:1)

标准相等运算符(==和!=)的行为取决于JavaScript版本。所以这是不使用它们的一个原因。

另一个原因是=的行为往往非常模糊。

请参阅https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Operators/Comparison_Operators

答案 6 :(得分:0)

我理解==。 (undefined == null是一个例外)

("0" == false) === true
("0" === false) === false

我从未理解++--这件事。我不喜欢在我的代码中执行i+=1(它比++i慢。)