javascript – JQuery如何不通过JSLint?

Possible Duplicate:
07000

http://code.jquery.com/jquery-1.4.4.js

转到那里并粘贴到www.jslint.com

Jquery不应该是有效的….

这是符合它太多的工作,符合跨浏览器。 JSLint是有用的,但它只是一个通用的解析器。 jQuery有很好的理由抛出错误。

有时您只需要简单的肮脏的黑客,以便在不兼容的浏览器中使用代码。

我们一个接一个地看着他们:

Problem at line 231 character 20:
Expected ‘===’ and instead saw ‘==’.

return num == null ?

这里jquery使用== on null来检查undefined和null。由于jQuery用作外部库,因此不能保证我们传递给函数的输入是否未定义或为空。它更安全,它检查两者。

做num === undefined || num === null来满足JSLint是可笑的。

Problem at line 446 character 29:
Expected a conditional expression and
instead saw an assignment.

while ( (fn = ready[ i++ ]) ) {

这里JSLint抱怨分配而不是等于检查。 JSLint引发这个错误的原因是因为它错误地类型为==而不是==。在此while循环中进行分配是为了使代码更加完美。

Problem at line 550 character 9: Empty
block.

var key; for ( key in obj ) {}
return key === undefined ||
hasOwn.call( obj, key );

JSLint抱怨一个空的块。这里已经完成了目的,因为我们不想用键做任何事情,而是我们想枚举所有的键,只关心最后一个。

Problem at line 554 character 15: Move
‘var’ declarations to the top of the
function.

for ( var name in obj ) {

JSLint坚持在函数的顶部放置变量声明。这有点傻,可以忽略,如果你想。这是一个风格的问题。

然后解析器崩溃。让我删除一些崩溃的代码,看看是否可以找到更多的投诉。

Problem at line 792 character 42: The
‘&&’ subexpression should be wrapped
in parens.

ua.indexOf(“compatible”) < 0 &&
rmozilla.exec( ua ) ||

我actaully同意这一个(ua.indexO(“compatile”)< 0)&&更好。

Problem at line 872 character 3: Move
the invocation into the parens that
contain the function.

})();

对于封闭如:

(function() {

})();
//}());

JSLint喜欢在括号中查看函数invokion作为样式。我也同意这一点,但实际上并不重要。

Problem at line 972 character 13: ‘e’
is already defined.

} catch(e) {

解析器抱怨变量e的重用在这种情况下,我们知道e只会在该catch块中被本地使用,所以如果我们在catch块之外改变它,这并不重要。这里我更喜欢重新使用变量名称e的可读性

Problem at line 1097 character 21:
Expected ‘===’ and instead saw ‘==’.

elem = elem == window ?

好的,你抓住了我这个。为什么jQuery在窗口上不使用===

Problem at line 1621 character 24:
Expected an assignment or function
call and instead saw an expression.

parent.selectedIndex;

// Safari mis-reports the default selected property of an option
// Accessing the parent's selectedIndex property fixes it
if ( name === "selected" && !jQuery.support.optSelected ) {
    var parent = elem.parentNode;
if ( parent ) {
    parent.selectedIndex;

这是其中一个跨浏览器的兼容性错误,可以修复,但会导致错误的代码

Problem at line 977 character 17:
Missing ‘break’ after ‘case’.

case “last”:

JSLint说你应该总是打破你的情况。一个案件​​完全有效。在大多数情况下,你忘了打破这里这是故意的。

Problem at line 1099 character 77:
Expected an assignment or function
call and instead saw an expression.

Array.prototype.slice.call(
document.documentElement.childNodes, 0
)[0].node…

// Perform a simple check to determine if the browser is capable of
// converting a NodeList to an array using builtin methods.
// Also verifies that the returned array holds DOM nodes
// (which is not the case in the Blackberry browser)
try {
    Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;

这里的来源本身就在这里。这是一个奇怪的声明,但如果访问它像这样会抛出一个错误,那么它可以被捕获。它仍然有效只是JSLint告诉你“你真的是这样做吗?

Problem at line 2377 character 15: Bad
for in variable ‘name’.

for ( name in options ) {

这里JSLint抱怨在全局范围内使用可能与window.name冲突的名称。这是一个“不太保留的未来关键字,但仍然应该避免”。在关闭,所以它是安全的。

Problem at line 2486 character 29: Too
many errors. (60% scanned).

JSLint的内部堆栈无法处理。我现在要停下来

我认为这一点被说明了。

JSLint有很多“你确定要这样做”,并且告诉我们,我们想做到这一点。它可能看起来像一个错误,但不是。

翻译自:https://stackoverflow.com/questions/4846846/how-come-jquery-doesnt-pass-jslint

转载注明原文:javascript – JQuery如何不通过JSLint?