변수가 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.