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)
上面两个条件最终是等价的,但第一个条件更具可读性,当然如果你知道类型强制和==行为方式.
了解==操作员的工作方式,将帮助您明智地决定使用哪个.
推荐文章:
==工作的好技巧)typeof,==和===Gre*_*ill 10
Doug Crockford对Javascript中的"好"和"坏"有自己的看法.因此,JSLint实现了这些检查,但如果您不完全同意,则将它们作为可选项.
禁止==有助于防止你在真正意义上犯错误===.当然,这假设您从未真正想要使用==.
禁止++和--是一种风格的东西,有些人认为他们是难度比阅读+= 1和-= 1.
Douglas crockford(JSLint 的编写者)在这段视频中解释了自己:
http://www.youtube.com/watch?v=hQVTIJBZook#t=14m45s
但基本上(正如其他人提到的)这是因为类型强制。
说实话,值得一看 who 的视频 - 非常有趣且有用。