2012-12-16 3 views
1

문제

나는 혼란을 설명하기 위해 샘플 JavaScript 파일을 만들었습니다.JSHint 옵션의 작동 방식에 대해 혼동했습니다.

(function() { console.log(true == true); })() 

이렇게하면 두 가지 오류가 발생합니다. 먼저 === 대신 ==을 사용하고 둘째, 세미콜론이 누락됩니다. 그러나 실행했을 때 노드 REPL에서

을 on하면 예상치 못한 오류가 발생합니다.

[jshint하기] 두 번째 매개 변수는 JSHINT의 작동을 제어하는 ​​옵션의 선택 목적은 다음 JSHint 문서에, 그것이 말하는 때문에 나는 오류를 기대할 이유입니다. 대부분의 옵션은 부울입니다. 이들은 모두 이며 선택 사항이며 기본값은 false입니다.

옵션을 정의하지 않았으므로 오류가 발생하지 않을 것으로 예상되므로 모두 거짓이어야합니다. 예기치 않은 동작의 마지막 부분은 설정 옵션이 아무 것도하지 않는 것입니다. 다음 두 통화도 jshint 같은 오류가 발생합니다 :

var myFile = '(function() { console.log(true == true); })()'; 
jshint(myFile, {eqeqeq: false, asi: false}); 
jshint('/*jshint eqeqeq:false, asi:false */\n' + myFile); 

질문 나는 JSHint 옵션이 작동 내가 잘 설명서를 잘못 해석 될 수있는 방법을 잘 모르겠어요

. 위의 jshint이나 내 가정에서 내 호출이 잘못되었거나 실제로 JSHint에 문제가 있는지 알면 고맙겠습니다.

답변

6

일부 옵션은 기본적으로 해제되어 있지 않습니다. 우리의 문서 (http://www.jshint.com/docs/)에서 몇 가지 옵션이 '시행'이고 일부는 '느긋한'것을 볼 수 있습니다 [1]. 즉, 일부 경고가 기본적으로 표시되며 '완화'옵션을 사용 중지해야합니다.

자,이 정보를, 이제 두 번째 질문을 살펴 보자 :

/*jshint eqeqeq:false, asi:false */ 
(function() { console.log(true == true); })() 

이 코드는 == true에 대한 안전하지 않은 비교 경고 및 누락 된 세미콜론을 트리거합니다. 당신은 eqeqeq와 asi의 두 가지 옵션을 해제하여 문제를 해결하려고했습니다. 전자를 true로 설정하면 엄격한 비교가 필요합니다. 이며 기본적으로 해제되어 있으므로 생략 할 수 있습니다. JSHint는 == true/false/0/null 비교가 안전하지 않다고 생각하기 때문에 경고가 표시되며 현재는 해제 할 방법이 없습니다 (예 : a == b에 대해서는 경고가 표시되지 않습니다) [2]. 후자의 옵션 (asi)은 느슨한 옵션이므로 JSHint에 누락 된 세미콜론을 허용하는 것이 좋다는 사실을 알리기 위해 실제로이 옵션을 켜야합니다. 예제를 통과 시키려면 다음과 같이 변경해야합니다.

/*jshint asi:true */ 
(function() { console.log(true === true); }() 

[1] -이 혼란 스럽습니다. 이전 버전과의 호환성 덕분에 옵션의 작동 방식을 바꿀 수는 없지만 혼란을 줄이기 위해 노력하고 있습니다. 나는 각 옵션에 대한 기본값을 곧 문서에 추가 할 것이다.

[2] - 곧 출시 될 1.0.0 릴리스에서는 해당 이름이 지정된 옵션이 없더라도 코드로 경고를 무시할 수 있습니다.

+0

엄청난 답변을 해주셔서 감사합니다. – Aaron