변수가 null이 아닌지 확인하는 방법?


답변:


399

그것들은 동등하지 않습니다. 첫 번째 는 진실한if 경우 (즉 , 조건부로 평가되는 경우 myVar) 명령문 다음에 블록을 실행하는 반면, 두 번째는 이외의 값 이면 블록을 실행합니다 .truemyVarnull

JavaScript에서 진실이 아닌 유일한 값은 다음과 같습니다 (일명 거짓 값).

  • null
  • undefined
  • 0
  • "" (빈 문자열)
  • false
  • NaN

69

변수가 NULL이 아닌지 테스트하는 방법은 다음과 같습니다.

if (myVar !== null) {...}

myVar에가 null이 myVar에이 정의되지 않았거나 허위 또는 경우 ...이 실행됩니다 아닌 경우 블록이 실행됩니다 0이나 NaN또는 다른 어떤 ..


1
궁금해하는 사람들을 위해 ... 이것은 빈 문자열 ("")과 정의되지 않은 것을 검사하지 않습니다 . 내 바이올린을 참조로 참조하십시오 : jsfiddle.net/b0tm7yaf
Barrosy

47

이 게시물을 읽으십시오 : http://enterprisejquery.com/2010/10/how-good-c-habits-can-encourage-bad-javascript-habits-part-2/

일반적으로 JavaScript에 대한 유용한 팁이 있지만 언급 한 가지는 다음과 같이 null을 확인해야한다는 것입니다.

if(myvar) { }

또한 당신이 깨닫지 못할 '거짓'으로 간주되는 것을 언급합니다.


33
이 검사는 실제로 안전하지 않습니다. myvar가 0, false 또는 다른 잘못된 값이면 테스트가 실패합니다 (널이 아닌지 확인하려는 경우). 따라서 변수가 다른 잘못된 값을 가질 수없는 경우이 값을 사용하여 null이 아닌지 확인하십시오.
Werzi2001

2
링크가 더 이상 작동하지 않습니다. 여기에 게시물로 보이는 것의 사본을 발견했습니다 : appendto.com/2010/10/… Elijah의 게시물 (및 샘플 코드)은 그가 저자임을 제안하기 때문에 이상합니다. ...
thepaulpage

2
해당 사이트가 더 이상 존재하지 않는 것 같습니다. 외부 링크가 아니라 게시물 자체에 정보를 포함시킬 수 있다면 도움이 될 것입니다.
apraetor

값이 있지만 0 인 경우 작동하지 않습니다.
zmechanic

15
  • 내부의 코드 는 다음과 같은 if(myVar) { code }경우에만 실행되지 않거나 변수를 정의하지 않았습니다 (추가로 코드 실행을 중지하고 예외를 throw).myVarfalse, 0, "", null, undefined, NaNmyVar
  • 내부의 코드 는 같 거나 정의 if(myVar !== null) {code}하지 않은 경우에만 실행되지 않습니다 (예외 발생).myVarnull

여기에 모든 것이 있습니다 ( src )

만약

여기에 이미지 설명을 입력하십시오

== (그것의 부정 ! = )

여기에 이미지 설명을 입력하십시오

=== (그것의 부정 ! == )

여기에 이미지 설명을 입력하십시오


9

내가 방금 본 또 다른 가능한 시나리오가 있습니다.

나는 아약스 호출을하고 문자열 형식으로 데이터를 null로 되 돌렸다. 나는 이것을 다음과 같이 확인해야했다.

if(value != 'null'){}

따라서 null은 실제로 null이 아닌 "null"을 읽는 문자열이었습니다.

편집 : 내가 해야 할 방식으로 이것을 판매하지 않는다는 것을 이해해야합니다 . 이것이 유일한 방법 인 시나리오가있었습니다. 왜 백엔드를 쓴 사람이 데이터를 잘못 표시했는지 확실하지 않지만 실제로는 이것이 현실입니다. 그것이 옳지 않다는 것을 이해 한 사람이 실제로 투표 한 것을보고, 실제로 도움이되는 누군가에 의해 투표되는 것을 보는 것은 실망 스럽습니다.


오히려 null문자열 과 비교하는 것보다 값을 구문 분석하십시오 .
Bergi

1
이 답변은 응용 프로그램의 이해 여부에 관계없이 합법적입니다. 실제로 작동하는 게시물을 게시 한 것에 대해 감사를 표합니다. 만지기 전에 공감대가 있다는 것을 알고 계셨습니까? 실제 시나리오이기 때문입니다.
Flat Cat

3
예, 잘못된 해결책이라고 생각하기 때문에 하향 투표했습니다. 아약스 호출의 경우 value = JSON.parse(value)간단하고 적절한 value != null테스트를 수행하는 것이 좋습니다.
Bergi

2
분명히 당신은 이해하지 못합니다. 나는 당신이 생각한다고 생각하지만 그렇지 않습니다.
Flat Cat

4
나는 그것이 효과적인 해결책이라는 것을 이해합니다. 그러나 나는 그것이 좋은 조언이라고 생각하지 않으므로 내 공감대를 존중하십시오.
Bergi

1

if myVar가 null이면 block이 다른 방식으로 실행되지 않으면 실행됩니다.

if (myVar != null) {...}


문자열 'null'이 아니라 특수한 값 null.
Micah Walter

1

때로는 정의되지 않은 경우 준비하는 것이 좋습니다. 이를 위해 typeof를 사용했습니다.

if(typeof(variable) !== "undefined") {
    //it exist
    if(variable !== null) {
        //and is not null
    }
    else {
        //but is null
    }
}
else {
    //it doesn't
}

-4

여기에 나열된 두 가지 조건문은 서로보다 낫지 않습니다. 사용 상황에 따라 다릅니다. 두 번째 예에서는 오타가 있습니다. 느낌표 뒤에는 등호가 하나만 있어야합니다.

첫 번째 예는 myVar 의 값 이 true 인지 확인 하고 {...} 내부의 코드를 실행합니다 .

두 번째 예는 myVar 가 null이 아닌지 평가 하고,이 경우 true이면 {...} 내부에서 코드를 실행합니다 .

더 많은 기술에 대한 조건문을 살펴 보는 것이 좋습니다. 일단 익숙해지면 필요할 때 결정할 수 있습니다.


12
아마 두 번째 예에서는 오타가 아닙니다. 두 번째 =는 결정적이며 질문에 큰 차이를 만듭니다. JavaScript 의 존재 !=====연산자를 모르는 것 같습니다 .
Tim Down

1
지적 해 주셔서 감사합니다. 나는 그것이 오타라고 생각했지만 지금은 한동안 보지 못하고 잊었던 것을 기억합니다.
의사
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.