null이 아닌 자바 스크립트 검사


133

아래는 코드 조각으로 양식 값을 검색합니다. 추가 처리 전에 값이 널이 아닌지 점검하십시오.

var val = document.FileList.hiddenInfo.value;
alert("val is " + val);  // this prints null which is as expected
if (val != null)
{
   alert("value is "+val.length); // this returns 4
}
else
{
   alert("value* is null");
}

왜 그런 일이 발생하는지 어떤 아이디어 .. ??


2
CW는 6 명 이상의 사용자가 질문을 편집했기 때문에 발생했습니다.
YOU

! == 대신! =
GetBackerZ

답변:


78

val이 아니지만 문자열로 null포함되어 있기 때문 'null'입니다.

'null'로 확인하십시오.

if ('null' != val)

작동시기 및 이유에 대한 설명은 아래 세부 정보를 참조하십시오 .


2
어쨌든 그것은 따옴표로 작동하지 않는 경우 (null! = val)이어야합니다
Ananda

질문에 Mr.x, null은 문자열로 ... 귀하의 경우는 다를 수 있습니다
Arsen Mkrtchyan

145

이것은 당신을 위해 트릭을 할 것입니다

if (!!val) {
    alert("this is not null")
} else {
    alert("this is null")
}

22
기술적으로는 이것이 작동하지만 이중이 아닌 (!!)은 프로그래밍 가짜-파입니다. 실제로 if(val)는와 동일하며 읽기가 훨씬 명확합니다. 나는 그것을 고수 할 것입니다 (fyi Ujwal, !! val은 기술적으로 C 또는 C ++에서 작동해야합니다) javascript 'truthiness'값은 여기를 참조하십시오 : janosch.woschitz.org/javascript-equality-comparison
Will Buck

2
어떻
습니까

1
!! 그냥 이중 음수이므로 문자 그대로 if (val.exists)를 말합니다. 그래도 그래도 좋아 보인다!
Kurai Bankusu

12
val = 0이후 !!0거짓으로 평가 되면 실패 할 것입니다.
punkrockpolly

3
단순한 이중 부정이 아닙니다. 변신 이중 부정이다. 기본적으로 변수를 부울로 변환합니다. 당신의 변수입니다 주제에 말을하지만 경우에 그런 말을하는 데 충분하기 위해 많이있다 0, false, null, undefined또는 일부 같은 값으로 확인하는 것이 true하나가!, 당신이받을거야 false위해!. 사용하는 경우에는 드물게 사용해야합니다.
Guy Passy 2016 년

83

"null이 아님"을 확인하는 세 가지 방법이 있습니다. 권장 사항은 Strict Not Version을 사용하는 것입니다.

1. 엄격한 버전 아님

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

엄격하지 않은 버전은 "엄격한 평등 비교 알고리즘"을 사용합니다 http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.6 합니다. 는 !==댄, 빠른 성능을 !=완전 항등 비교 알고리즘 값 캐스트하지 않기 때문에 운영자.

2. 엄격하지 않은 버전

if (val != 'null') { ... }

엄격하지 않은 버전은 "추상 평등 비교 알고리즘" http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3을 사용 합니다. 는 !=댄 느린 성능이 !==요약서 동일성 비교 알고리즘 타입 변환 값 때문에 운전자.

3. 더블이 아닌 버전

if (!!val) { ... }

Double Not Version !!은 Strict Not Version !==과 Non-Strict Not Version !=( https://jsperf.com/tfm-not-null/6 ) 보다 성능이 더 빠릅니다 . 그러나 "Falsey"값 을 False ( http://www.ecma-international.org/ecma-262/5.1/#sec-9.2 ) undefined와 같은 형식으로 캐스트 하면 예기치 않은 결과가 발생할 수 있으며 가독성이 떨어집니다. 명시 적으로 언급되지 않았습니다.NaNnull


매우 이상합니다. !!val나를 위해 일했지만 val!==null하지 않았습니다. 왜 그렇습니까?
TheLogicGuy

@TheLogicGuy-데이터 유형은 val무엇입니까? console.log(typeof val).
tfmontague

번호. 이 코드는 배열에서 "잘못된"값을 제거합니다 (null, 0 등). 여기 코드는 다음과 같습니다 pastebin.com/L7Z1BtuL
TheLogicGuy

1
@TheLogicGuy-실제 문제는 null과 관련이 없습니다. NaN이 올바르게 필터링되지 않습니다. 항상 true를 반환합니다. 이것은 작동해야합니다 :! (isNaN (val) && (typeof val! == "undefined")). Javascript에는 "Truthy"및 "Falsey"라는 개념이 있습니다. double-not 연산자 !!는 단순한 것 이상을 제거 null합니다. 그것은 변환합니다 NaNundefined거짓으로뿐만 아니라. 그래서 double not-operator를 사용할 때 배열이 올바르게 필터링됩니다 !!.
tfmontague

30

!==as !=를 사용 하면 전 이적이지 않은 JavaScript 진리표의 이상한 세계 로 안내 할 수 있습니다.


특별히 확인하지 않으려면 undefinednull. 하는 경우 val != null반환 true을 위해 undefined또는 null아니라 같은 다른 falsey의 값 0.
Eric H

8

엄격한 not equals비교 연산자 !==를 사용하여 사용자가 입력 "null"하면에 접근 할 수 없도록해야합니다 else.


1
Susan Null은 데이터 입력 양식에 이름이 허용되지 않으면 행복하지 않습니다. lol
Andez

5

val이 실제로 값이 "null"아닌 문자열 이기 때문일 수 있습니다 null.


3

이것은 잘 작동합니다 ..

   if(val!= null)
    {
       alert("value is "+val.length); //-- this returns 4
    }
    else
    {
       alert("value* is null");
    }

2

0을 유효한 값으로 포함 시키려면 다음을 수행하십시오.

if (!!val || val === 0) { ... }

1

이것은 작동합니다 :

if (val) {
    alert("Not null");
} else {
    alert("Null");
}

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.