我正在查看JSLint,其中一些规则激起了我的兴趣。特别是:
禁止==和!=
禁止++和 -
为什么禁止这些是不错的主意?我理解第一部分,基本上它要我===
而不是==
。 我不明白为什么。我理解两者之间的区别,我只是想知道为什么这是不好的做法。有时候我真的想以==
为例,以便对undefined == null
第二个,我根本不明白。它是否要我做myInt + = 1而不是myInt ++?
谢谢!
答案 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") {}
以上两个条件最后是相同的,但第一个条件更具可读性,当然,如果您了解类型强制以及==
的行为方式。
了解==
运算符的工作原理,可以帮助您明智地决定使用哪个运算符。
推荐文章:
==
如何运作的重要提示)typeof
, ==
and ===
答案 1 :(得分:10)
Doug Crockford对Javascript中的“好”和“坏”有自己的看法。因此,JSLint实现了这些检查,但如果您不完全同意,则将它们作为可选项。
禁止==
有助于防止您在真正意图===
时犯错误。当然,这假设您从未真正想要使用==
。
禁止++
和--
是一种风格,有些人认为它比+= 1
和-= 1
更难阅读。
答案 2 :(得分:4)
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
慢。)