2011-01-31 1 views
16

가능한 중복 :
What good is JSLint if jQuery fails the validation어떻게 JQuery가 JSLint를 전달하지 않습니까?

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

이동 www.jslint.com 거기에 붙여 넣은

는 jQuery를 유효로되어 있지 않습니다. ...

+4

이전에 요청되었습니다. http://stackoverflow.com/questions/505251/what-good-is-jslint-if-jquery-fails-the-validation –

+2

JSLint는 유효성에 대한 것이 아닙니다. 그것은 코딩 규칙에 관한 것입니다. 그것이 내 관점이다. – HerrSerker

답변

87

브라우저를 준수하는 것이 너무 많습니다. 은 브라우저 간 호환이 가능합니다. JSLint는 유용하지만 범용 파서 만 사용할 수 있습니다. jQuery에는 오류를 던질 좋은 이유가있다.

때때로 비 호환 브라우저에서 작동하는 코드를 얻으려면 간단한 더러운 해킹이 필요합니다. '==' 예상 '==='대신 보았다

의 하나가 그들 중 하나를 살펴 보자 : 라인 231 문자 20에서

문제.

return num == null?

여기 JQuery와는 undefinednull 모두 확인 null==를 이용한다. jQuery는 외부 라이브러리로 사용되므로 함수에 전달하는 입력이 undefined 또는 null이 될지 여부를 확인할 수 없습니다. 두 가지 모두를 확인하는 것이 더 안전합니다.

JSLint를 만족시키기 위해 num === undefined || num === null을 수행하는 것은 터무니 없습니다. 라인 446 문자 29에서

문제 : 는 조건식을 예상하고 대신 할당을 보았다.

동안은 ((FN = 준비는 [I ++])) {여기

은 JSLint 대신의 지정에 대해 불만을 체크 같습니다. JSLint가이 오류를 throw하는 이유는 공통적으로 실수로 == 대신 =을 입력하기 때문입니다. 이 while 루프는 코드를 더 깔끔하게 만들기 위해 지정됩니다.

문제점 550 행 9 번 : 공백 블록.

var key; for (key in obj) {}
return 키 === 정의되지 않음 || hasOwn.call (obj, key);

JSLint는 블록에 대해 약 공백을 표시합니다. 여기에 우리가 key으로 아무것도하고 싶지 않기 때문에 여기에 목적이 있습니다. 우리는 모든 키들을 열거하고 마지막 것을 신경 써야합니다.라인 554 문자 15에서

문제 : 기능의 정상에 'VAR'선언을 이동합니다. (OBJ의 VAR 명) {

JSLint위한

함수의 상단 변수 선언을 갖는 주장한다. 이것은 약간 어리석은 당신이 원한다면 무시할 수 있습니다. 그것은 스타일의 문제입니다.

그리고 파서가 충돌합니다. 코드를 삭제 한 코드를 제거하고 더 많은 불만 사항을 찾을 수 있는지 확인하겠습니다. 라인에서

문제 792 42 문자 다음 '& &'표현식은 괄호에 래핑한다.

ua.indexOf ("호환") < 0 & & rmozilla.exec (UA) ||

나는이 하나에 동의합니다. (ua.indexO("compatile") < 0) &&이 좋습니다. 라인에서

문제 872 문자 3 함수를 포함하는 괄호로 호출 이동.

})(); 같은 폐쇄를 들어

는 :

(function() { 

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

JSLint 스타일의 문제로 괄호 안에 함수 invokion을보고 좋아한다. 나도 이것에 동의한다. 그러나 정말로 전혀 중요하지 않다.

줄 972 문자 13의 문제 : 'e' 이 이미 정의되었습니다.

} 캐치 (전자) {

파서 우리는 우리가 외부를 변경하는 경우이 문제가 나던 있도록 e가 해당 catch 블록에서 로컬로 사용되는 것을 알고이 경우 변수 e의 재사용에 대해 불평

catch 블록. 여기에 줄 1097 문자 (21)에 변수 이름을 다시 사용 e

문제의 가독성을 선호하는 '===' 예상하고 대신 '=='보았다.

elem = elem == window?

좋아, 너는 나를 잡았어. 가 할당 또는 대신에 기능 호출하고이 식을 보았다 예상 : 나는 jQuery를 줄 1621 문자 (24)에 window

문제에 ===를 사용하지 않는 이유에 stumbed하고 있습니다.

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; 

여기에 고정 할 수있는 그 크로스 브라우저 컴플라이언스 버그 중 하나입니다하지만 라인 977 문자 (17) 나쁜 code

문제가 발생합니다 '사건'후 '휴식'가 없습니다.

경우 "마지막"

JSLint 당신은 항상 당신의 경우 후 중단해야한다고 말했습니다. 사건이 끝난 후 완전히 빠져 나가는 것이 좋습니다. 대부분의 경우 break을 잊었지만 여기는 의도적 인 것입니다. 라인 1099 문자 77에서

문제 : 은 할당 또는 함수 전화를 예상하고 대신에 식을 보았다.

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가 "당신은 정말로 이것을 의미합니까?"라고 말하는 것만으로도 여전히 유효합니다.

문제 : 2377 번 글자 15 번 : 'name'변수에 대해 이 잘못되었습니다. (옵션에서 이름) {

여기 JSLint가 글로벌 범위에서 window.name과 충돌 할 수 name의 사용에 대해 불평에 대한

. "아직 예약되지 않은 미래의 키워드이지만 여전히 피해야합니다". 문 닫았을 때 안전 했어.

문제 2486 번 글자 29 : 너무 많음 많은 오류가 있습니다. (60 % 스캔 됨).

JSLint의 내부 스택이 처리 할 수 ​​없습니다. 나는 이제 그만 갈거야.

요점이 설명되어 있다고 생각합니다.

JSLint에는 "이 작업을 수행 하시겠습니까?"라는 메시지가 많이 있습니다. 그것은 실수처럼 보일지 모르지만 그렇지 않습니다.

+4

나는 그것이 악하다고 반대한다. jslint는 유용합니다. 규칙을 따르는 것이 지침 일 뿐이며 오류와 경고의 의미와 무시할 수있는 경우를 기억하는 것입니다. –

+0

@ 엘보 보우. 나는 JSLint에서 약간 가혹했다. – Raynos

+1

모든 브라우저에서'(null == undefined) === true'를 의미합니까? – Alxandr

6

jslint가 사용하는 규칙은 지침이며 깨지지 않는 규칙은 아닙니다. 당신이 그들 중 일부를 무시하고자하는 많은 이유가 있습니다.

상당수가 detailed considerations of jslint rules입니다. 많은 사람들이 그것에 동의하지 않습니다.

개인적으로, 나는 그것을 좋아하지만 각 JS 파일 맨 위에있는 주석을 사용하여 내가하는 일이 적절하다는 것을 알 때 다양한 경고를 켜고 끕니다. 그런 다음 CI 테스트의 일부로 모든 JS에 대해 jslint를 실행합니다. 이제는 사소한 실수를 저지르고 일반적으로 우리를 괴롭 히지 않습니다.

+0

다양한 설정을 켜고 끄더라도 JSLint가 오류를 발생시키는 것은 있지만 실제로하고 싶은 일이 있습니다. JSLint를 충분히 제어 할 수 없습니다. – Raynos

+1

테스트에 여분의 플래그를 추가하여 jslint를 완전히 건너 뛰었습니다. 정말 좋아하지 않는 것들을 원했던 구성 요소에서 jslint를 완전히 건너 뜁니다. 어쨌든 내 취향에 따라 jslint를 준수하는 작은 오버 헤드는 가치가 있습니다. phpcs가 서버 측 코드에 대해하는 것과 동일한 방식으로 일관된 스타일을 적용하기위한 것입니다. –

+0

최신 업데이트 : [jshint] (http://jshint.com/)는 훨씬 더 유연한 체크를 제공합니다. –