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

Fra*_*sco 0 javascript jslint

可能重复:
Javascript === vs ==:我使用哪个"相等"运算符是否重要?

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

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

所以我的问题是:我们是否必须按字面意思遵循所有JSLINT建议?

Chr*_*add 7

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

但长期的答案是,如果你这样做,从长远来看,你的生活将会变得更加容易.

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

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

所以,如果你正在使用的不是=== ==,你的代码几乎总是如你期望它,一个小的代价键入一个多余的字符进行.但是,如果你使用==并且操作数不是同一类型 - 例如字符串和整数,JavaScript将首先将这些值转换为相同的类型,然后比较它们.他们可能不会做你想要的或你期望的.而且,由于在JavaScript中,你经常处理从DOM带来的元素,进来的字符串,你碰上的字符串转换问题所有的时间.

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

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

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

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

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