2015-01-31 11 views
2

나는이 (가)의 구조를 두 번 동일 교체하려면 다음과 같은 경우 문 :자바 스크립트 비교 == null의 대안 자바 스크립트 코드에서

if(name == null) { 
    //do stuff 
} 

이중 등호 (=)가 권장 년대 jshint 규칙 "eqeqeq"실패 double equals를 triple equals로 대체합니다.

if(name === null) { 
    //do stuff 
} 

이 변수 위해 일하는 것이 명시 적으로 값 null을 가진 정의,하지만 불행히도이 같은 미 설정 변수에 대한 실패 : 잠시 들어, 다음과 같이 === null== null 변경 위의 코드를 가정 해 봅시다. 규칙을 트리플가-동일 이전

var a = null; // works correctly 
var b;  // will fail in comparison 

내가 다음

if(name === null ||| typeof(name) === 'undefined') 

할 것 나에게 중요했지만, 난이 매우 비 대한 찾을 수 있습니다.

:

내가 지금 가지고 올 수있는 최선의 대안은 경우 문의 성격을 사용하고 내가 표현을 부정하고 단순히 == null 부분을 제거 여기에 같은 거짓 틱 표현으로 평가하도록하는 것입니다

if(!name) { 
    //do stuff 
} 

나를 위해,이 방법은 훨씬 간단하고 읽기 쉽고 명백한 같음 비교를 완전히 피할 수 있습니다. 그러나 나는 여기에서 빠져 나가는 가장자리 원인이 있는지 불확실하다.

질문은 대체로 == null을 negated expression if 문으로 대체 할 수 있습니까? 그렇다면 작동하지 않는 함정과 예외는 무엇입니까? 일반 배열 항목, 문자열, 객체 속성에서 작동합니까? 솔루션을 따기위한

내 기준이 될 것입니다

  • 깨끗한 코드
  • 읽고 신속하게
  • 가 (2015 1월 작성으로) 현대적인 브라우저에서
  • 작품 jshint 규칙의 유효성을 확인 이해하기 쉬운

나는 difference in the equality operators == vs ===에 대해 논의하기 위해 다른 약간의 질문이 있음을 알고 있지만 if 문 내부의 null-ish와 비교되는 평가에 대한 설명 일뿐입니다.

+0

'==='규칙은 * 크게 과대 평가되었으므로 아마도 꺼 버릴 것입니다. –

+0

나는 다른 이유로 <==='규칙을 좋아한다 : 문자열 비교. 대신 가장 이상한 점은 자바 스크립트가 원래'=='와'==='를 모두 도입했다는 것입니다. 이로 인해 일어날 수있는 오류가 발생합니다. –

답변

3

그럼, 일반적으로 == null을 if 문으로 대체 할 수 있습니까?

아마도 보편적으로 아니요, 아마도 일부 지역에있을 수 있습니다.

그렇다면 작동하지 않는 함정과 예외는 무엇입니까? 일반 배열 항목, 문자열, 객체 속성에서 작동합니까?

!value 검사, falsey 모든 값에 대한뿐만 아니라 nullundefined 사실 일 것입니다. 전체 목록은 null, undefined, 0, "", NaN 및 물론 false입니다.

그래서 당신은 다음

if (!name) { 
    // ... 
} 

name = ""이있는 경우 ... 진정한 평가하고 블록에 갈 곳 이전

if (name == null) { 
    // ... 
} 

...하지 않을 것입니다. 그래서 모든 곳에서 그렇게하면 문제가 생길 수 있습니다.

그러나 잘못된 값으로 분기하려는 경우에는 !value 것이 매우 편리합니다. 예를 들어, 변수가 undefined (또는 null)이거나 객체 참조 인 경우, 허위 값이 나에게 충분하기 때문에 이것을 테스트하기 위해 if (!obj)을 사용할 것입니다.

당신이 JSHint의 === 규칙을 계속 사용하려는 경우, 당신은 자신에게 효용 함수를 줄 수 :

function isNullish(value) { 
    return value === null || typeof value === "undefined"; 
} 

함수 호출의 오버 헤드는 약 원격이 쓰이는 것은 (more), 및 없다 알맞은 자바 스크립트 엔진이 핫스팟에 있다면 어쨌든 인라인 할 것입니다.

+0

통찰력을 가져 주셔서 감사합니다. 나는 이전에 isNullish를 도입했으나 동작이 예상대로 일지라도 아마도 더 간단한 방법으로 처리 할 수 ​​있음을 알았다. –