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

7wp*_*7wp 15 javascript operators

我正在检查JSLint,一些规则激起了我的兴趣.特别是这个:

禁止==和!=

禁止++和 -

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

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

谢谢!

CMS*_*CMS 12

我不同意这些规则,而不是劝阻使用==,我建议学习类型强制.

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

A == B AND
B == C
Run Code Online (Sandbox Code Playgroud)

不保证:

A == C
Run Code Online (Sandbox Code Playgroud)

一个真实的例子:

'0' == 0; // true
 0 == '';   // true
'0' == ''; // false
Run Code Online (Sandbox Code Playgroud)

===当您比较相同类型的值时,严格的运算符不是必需的,例如:

 if (typeof foo == "function") { }
Run Code Online (Sandbox Code Playgroud)

我们typeof比较运算符的结果,它总是一个字符串,与字符串文字...

另一个例子,当你比较某些东西时null,==也会比较undefined,例如:

if (something == null) {}
Run Code Online (Sandbox Code Playgroud)

VS

if (something === null || typeof something === "undefined") {}
Run Code Online (Sandbox Code Playgroud)

上面两个条件最终是等价的,但第一个条件更具可读性,当然如果你知道类型强制和==行为方式.

了解==操作员的工作方式,将帮助您明智地决定使用哪个.

推荐文章:


Gre*_*ill 10

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

禁止==有助于防止你在真正意义上犯错误===.当然,这假设您从未真正想要使用==.

禁止++--是一种风格的东西,有些人认为他们是难度比阅读+= 1-= 1.

  • 我建议阅读[Javascript:The Good Parts](http://books.google.co.nz/books?id=PXa2bby0oQ0C),了解有关Crockford观点的全部细节. (9认同)
  • 对..我想我想知道的是为什么他会考虑那些'好',即使我不同意它.只是想知道他的观点. (2认同)

luc*_*001 5

Douglas crockford(JSLint 的编写者)在这段视频中解释了自己:

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

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

说实话,值得一看 who 的视频 - 非常有趣且有用。