Jslint:太严格了? ==和===之间的区别

时间:2011-03-29 14:35:25

标签: javascript jslint

  

可能重复:
  Javascript === vs == : Does it matter which “equal” operator I use?

当我用JSLINT检查我的代码时,它充满了错误......即使在Ie6中也能完美运行但由于某种原因,因为我不是一个优雅的编码器,我得到了100多个错误......

所以我想学习如何编写更好的代码,没有错误......但是当我使用了一些建议时,JSLINT给了我的意思是用===替换==,我做了,没有什么工作..

所以我的问题是:我们是否必须遵循所有JSLINT建议?

3 个答案:

答案 0 :(得分:7)

JSLint测试由Douglas Crockford创建的Javascript的专业子集。从本质上讲,他试图只雕刻JavaScript语言中的“好部分”,使程序员的生活更轻松,编码更易读和可预测。所以,简短的回答是否定的。您不必按照说明操作。完全有效的JavaScript代码将会一直失败,并且确实会使JSLint失败。

但长期的答案是,如果你这样做,你的生活将会更加轻松。

以=== vs. ==为例。不同之处在于测试EQUALITY与IDENTITY的测试。或者,正如克罗克福德在他的书中所说,JavaScript: The Good Parts

  

JavaScript有两组相等运算符:===和!==,它们的邪恶双胞胎==和!=。优秀的工作方式与您期望的方式相同。如果两个操作数是相同的类型并且具有相同的值,则===产生true并且!==产生false。当操作数属于同一类型时,邪恶的双胞胎做正确的事,但如果它们属于不同的类型,它们会试图强迫价值观。他们这样做的规则是复杂和不可取的。

因此,如果你使用===而不是==,你的代码几乎总是按照你的预期执行,输入额外字符需要付出很小的代价。但是,如果你使用==并且操作数不是同一类型 - 例如字符串和整数,JavaScript将首先将这些值转换为相同的类型,然后比较它们。他们可能不会做你想要的或你期望的。而且,因为在JavaScript中,你经常处理从DOM引入的元素,这些元素以字符串形式出现,你会一直遇到字符串转换问题。

正如Crockford所写,以下是您可能遇到的一些问题:

'' == '0'   => false
0 == ''     => true
0 == '0'    => true

false == 'false'    => false
false == '0'       => true

搞砸了,是吗? JavaScript: The Good Parts是一本很棒的书,超薄,如果你已经使用JavaScript一段时间了,它会改变你编码的方式。 JSLint也是如此,如果你像一个好海军一样低头。

因此。答案很长?不,你不必做JSLint告诉你的所有事情。但你应该。

答案 1 :(得分:4)

没有。道格·克罗克福德不会亲自出现在你家里来打败你。

尽管如此,请参阅Which equals operator (== vs ===) should be used in JavaScript comparisons?关于=====的内容。

答案 2 :(得分:2)

不必遵循JSLint建议。

你没有必须编写测试。

你没有必须避免全局变种。

在部署之前, 必须检查代码是否有效。

你没有必须从陌生人那里拿糖果。

但它可以拯救你的屁股。