null과 undefined 및 ==와 ===의 차이에 대한 JavaScript 검사


579
  1. 그것이 있다면 어떻게 변수를 확인합니까 null또는 undefined과의 차이 무엇 null하고 undefined?

  2. 무엇 차이점은 무엇 =====(그것은 "==="에 대한 구글 검색 어렵다)?


10
(2) 사이의 차이 ==와는 ===여기서 설명 .
우즈벡 존

1. === 대신 === 사용 JavaScript는 두 가지 종류의 항등 연산자를 사용합니다. === | ! == 및 == | ! = 비교할 때 항상 이전 세트를 사용하는 것이 가장 좋습니다. "두 피연산자가 동일한 유형 및 값인 경우 ===는 true를 생성하고! ==는 false를 생성합니다." -JavaScript : 좋은 부분 그러나 == 및! =로 작업 할 때 다른 유형으로 작업 할 때 문제가 발생합니다. 이 경우 실패한 값을 강제하려고 시도합니다. code.tutsplus.com/tutorials/…
jasonleonhard

4
"엄격한 평등 연산자"를 검색하면 관련성이 높은 결과를 얻을 수 있습니다.
Danield

여기에 많은 답변을 추가하기 위해 lodash.com/docs#isNil 함수를 사용 하여 변수가 null인지 정의되지 않았는지 확인할 수 있습니다.
Kfir Erez

답변:


936

그것이 있다면 어떻게 변수를 확인합니까 nullundefined...

변수입니다 null:

if (a === null)
// or
if (a == null) // but see note below

...하지만 경우에도 마찬가지 일 것이다 후자를주의 a입니다 undefined.

그것은 undefined:

if (typeof a === "undefined")
// or
if (a === undefined)
// or
if (a == undefined) // but see note below

... 다시 말하지만 마지막 것은 모호합니다. ais 인 경우에도 마찬가지 입니다 null.

위의 내용에도 불구하고, 그것들을 확인 하는 일반적인 방법은 그들이 거짓 이라는 사실을 사용하는 것입니다 .

if (!a) {
    // `a` is falsey, which includes `undefined` and `null`
    // (and `""`, and `0`, and `NaN`, and [of course] `false`)
}

이것은 스펙에서 ToBoolean 에 의해 정의됩니다 .

... 그리고 사이의 차이 무엇 nullundefined?

둘 다 일반적으로 무언가가 없음을 나타내는 데 사용됩니다. undefined함수가 호출 될 때 제공되지 않은 함수 인수의 값과 객체를 요청할 때 얻는 값으로 다른 값이 할당 될 때까지 변수의 기본값으로 사용되는보다 일반적인 것입니다. 속성이 없습니다. 그러나 이러한 모든 상황에서 명시 적으로 사용될 수도 있습니다. (속성이없는 객체와 값이있는 객체를 갖는 객체 undefined에는 차이가 undefined있습니다. 인수 값 을 가진 함수를 호출하는 것과 그 인수를 완전히 끄는 것 사이에는 차이가 있습니다.)

null다음보다 약간 더 구체적 undefined입니다. 빈 개체 참조입니다. 물론 JavaScript는 느슨하게 입력되었지만 JavaScript와 상호 작용하는 모든 항목이 느슨하게 입력 된 것은 아닙니다. 브라우저의 DOM과 같은 API가 비어있는 객체 참조가 필요한 경우 null, not 을 사용 undefined합니다. 마찬가지로 DOM의 getElementById작업은 유효한 객체 (DOM 요소를 찾은 경우) 또는 null그렇지 않은 경우 개체 참조를 반환합니다 .

흥미롭게도 (아니든), 그들은 그들 자신의 유형입니다. 즉, nullNull 유형 undefined의 유일한 값이고 정의되지 않은 유형의 유일한 값입니다.

"=="와 "==="의 차이점은 무엇입니까

그들 사이의 유일한 차이점 ==은 값을 일치시키기 위해 강제 변환을 수행 한다는 것 ===입니다. 예를 들어을 강제하기 "1" == 1때문에 사실 입니다. 그러나 입니다 거짓 유형이 일치하지 않기 때문에. ( 사실이다.)의 첫 번째 (실제) 단계 이다 "피연산자의 유형은 동일합니까?" 대답이 "아니오"이면 결과는 입니다. 유형이 동일하면 정확하게 작동합니다."1"1"1" === 1"1" !== 1===false==

유형 강제는 매우 복잡한 규칙을 사용하며 놀라운 결과를 낳을 수 있습니다 (예 "" == 0: 참).

사양에서 더 많은 것 :


122
TJ의 대답을 증류하기 위해 ===는 값과 유형이 동일 함을 의미합니다.
Slappy

13
@Slappy : :-) @ MUG4N : 그렇습니다. if (a) { ... }" a진실한 경우"를 의미합니다. 여기서 "truthy"는 0이 아닌, null이 아닌, 정의되지 않은, false가 아닌, 비어 있지 않은 문자열 값입니다. :-)
TJ Crowder 2019

4
음 ... downvoter가 왜 이것이 "유용하지 않다"고 생각하는지에 대한 유용한 피드백을 공유 할 것입니까?
TJ Crowder

2
@ Željko :이 시점에서 Crockford가 착각 한 것 같습니다. 객체null 가 아니라는 것은 사실입니다 . "객체 없음"을 의미하는 객체 참조입니다. 그것은 (예를 들면, 그들은 객체 참조를 제공 할 때 호스트가 제공하는 인터페이스와 함께 사용되는하지만 제공이없는 무엇 때문에, 중요 할 때 부모의 마지막 요소, 또는 해당 ID와 어떤 요소가 없을 때). 호스트가이를 위해 사용하는 기술은 JavaScript가 변수 / 속성 유형에 대한 것만 큼 유연하지 않을 수 있으므로 obj ref (와 반대 ) 가 필요했습니다 . node.nextSiblingnodegetElementByIdnullundefined
TJ Crowder

2
나는 Crockford가 잘못되었다는 것에 동의해야한다. typeof null"객체"를 반환하는 것이 의미가 있습니다. 의미가있는 유일한 다른 값은 "null"입니다. 왜냐하면 반드시와 다른 것을 반환해야하기 때문입니다 typeof undefined. null은 null 객체 참조를 나타내며, 최소한이를 보유하는 변수는 'object'유형에 해당됩니다. 실수라면 좋은 실수였습니다. 어쨌든 대답과 관련하여 크로스 창 스크립팅 중 undefined! == 에 대한 팁은 undefined특히 디버깅 목적으로 알고 있어야합니다.
Triynko

93

차이점은 미묘합니다.

JavaScript에서 undefined변수는 선언되지 않았거나 값이 할당되지 않은 변수입니다. 하자 당신이 선언 말한다 var a;예를 들어, 다음 a될 것입니다undefined 이 값을 지정하지 않았기 때문에.

당신이 다음에 할당하지만 a = null;다음 a지금 할 것이다 null. JavaScript null에서 객체는 ( typeof null당신이 믿지 않으면 JavaScript 콘솔에서 시도 하십시오), 이는 null이 값이라는 것을 의미합니다 (사실undefined .

예:

var a;
typeof a;     # => "undefined"

a = null;
typeof null;  # => "object"

이것은 함수 인수에 유용 할 수 있습니다. 기본값을 원할 수도 있지만 null을 허용 가능한 것으로 간주하십시오. 어떤 경우에는 다음을 수행 할 수 있습니다.

function doSomething(first, second, optional) {
    if (typeof optional === "undefined") {
        optional = "three";
    }
    // do something
}

선택적 optional매개 변수 를 생략하면 문자열이되지만 전달 하면 선택적이됩니다.doSomething(1, 2) then"three"doSomething(1, 2, null)null .

동일 ==하고 엄격하게 동일한 ===비교기의 경우 첫 번째는 약한 유형이며 엄격하게 동일한 값은 유형도 검사합니다. 그것은 그것이 0 == "0"참 이 될 것이라는 것을 의미 합니다. 동안0 === "0" 숫자가 문자열이 아니기 때문에, false를 돌려줍니다.

당신은 사이를 점검하기 위해 이러한 연산자를 사용할 수 있습니다 . 예를 들면 다음과 같습니다.undefinednull

null === null            # => true
undefined === undefined  # => true
undefined === null       # => false
undefined == null        # => true

마지막 경우는 변수가 정의되지 않았거나 null인지 여부를 확인할 수 있기 때문에 흥미 롭습니다.

function test(val) {
    return val == null;
}
test(null);       # => true
test(undefined);  # => true

1
: 카일 심슨 버그 "개체"를 반환 대해서 typeof NULL의 주장 github.com/getify/You-Dont-Know-JS/blob/master/...
bzrk

15

스펙 은 이러한 질문에 대한 완전한 답변을 얻을 수있는 곳입니다. 요약은 다음과 같습니다.

  1. 변수의 x경우 다음을 수행 할 수 있습니다.

    • null사용하여 직접 비교하여 확인하십시오 ===. 예:x === null
    • undefined직접 비교 undefined또는 와의 두 가지 기본 방법 중 하나 인지 확인하십시오 typeof. 들어 여러 가지 이유로 , 나는 좋아한다 typeof x === "undefined".
    • 그 중 하나 여부를 확인 null하고 undefined사용하여 ==및 평균이하는 약간 난해한 유형 강제 변환 규칙에 의존 x == null정확하게 당신이 원하는 않습니다.

  2. =====피연산자의 유형이 다른 경우 기본적인 차이점 은 피연산자가 ===항상 반환 false되는 동안 약간 직관적이지 않은 동작을 유발 ==하는 규칙 을 사용하여 하나 또는 두 피연산자를 동일한 유형으로 변환 한다는 것입니다. 피연산자는 동일한 유형 인 경우 (모두 예와 같이 문자열이다 예 typeof상기 비교) =====정확히 동일하게 작동한다.

더 많은 독서 :


9

변수가 null이거나 정의되지 않은 경우 어떻게 확인합니까

변수에 다음과 같은 유효한 값이 있는지 확인하십시오.

if(variable)

변수에 다음이 포함되어 있지 않으면 true를 반환합니다.

  • 없는
  • 찾으시는 주소가 없습니다
  • 0
  • 그릇된
  • ""(빈 문자열)
  • NaN

8

찾으시는 주소가 없습니다

변수가 아직 초기화되지 않았 음을 의미합니다.

예 :

var x;
if(x){ //you can check like this
   //code.
}

같음 (==)

점검 값만 datatype이 아닌지 확인하십시오.

예 :

var x = true;
var y = new Boolean(true);
x == y ; //returns true

value 만 검사하기 때문입니다.

엄격한 같음 (===)

값과 데이터 유형이 동일한 지 확인합니다.

예 :

var x = true;
var y = new Boolean(true);
x===y; //returns false.

데이터 유형을 검사하기 때문에 x는 기본 유형이고 y는 부울 객체입니다.


4

광고 1. null전역 객체의 속성에 대한 식별자 아니라, 같은 undefined 수 있습니다

광고 2. ===확인 값과 유형. ==망가 (사용하여 비교하기 전에 동일한 유형과 만든 암시 적 변환을 필요로 .valueOf()하고 .toString()). 여기에 모든 것이 있습니다 ( src ) :

만약

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

== (그것의 부정 ! = )

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

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

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


1
언급 할 가치가 document.all == null있으며document.all !== null
사용자

1

(논리적) 검사가 부정 (!)인지 확인하고 JS를 캡처 null하고 undefined (다른 브라우저에서 다른 결과를 얻을 수 있기 때문에) 덜 제한적인 비교를 사용하십시오.

var ItemID = Item.get_id();
if (ItemID != null)
{
 //do stuff
}

이 모두를 캡처 null하고undefined


0

다른 논리로 시도하십시오 . 자바 스크립트와 jquery에서 null이 아니고, 비어 있지 않고, 정의되지 않았으며 0이 아닌이 코드 (! (! (variable))) 만 사용하는 것과 같이 유효성 검사를 위해 four (4) 조건을 모두 확인하기 위해 다음 코드를 사용할 수 있습니다.

function myFunction() {
var data;  //The Values can be like as null, blank, undefined, zero you can test

if(!(!(data)))
{
   //If data has valid value
    alert("data "+data);
} 
else 
{
    //If data has null, blank, undefined, zero etc.
    alert("data is "+data);
}

}

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