티스토리 뷰

javascript null,undefined,empty 차이



undefined는 자료형이 결정되지 않은 변수이고, null은 자료형은 객체인데 비어있는 변수

undefined 
변수를 선언만하고 값을 할당하지 않음. 즉, 자료형이 결정되지 않은 상태
선언하지 안흔 변수도 콘솔이나 기타 메세지에는 undefined라고 뜨지만 undefined라는 값을 가지는 것은 아니다.

전역 undefined 속성은 undefined 원시 값을 나타내며, JavaScript의 원시 자료형 중 하나입니다. undefined는 전역 객체의 속성입니다. 즉, 전역 스코프에서의 변수입니다. undefined의 초기 값은 undefined 원시 값입니다. 값을 할당하지 않은 변수는 undefined 자료형입니다. 또한 메서드와 선언도 평가할 변수가 값을 할당받지 않은 경우에 undefined를 반환합니다. 함수는 값을 명시적으로 반환하지 않으면 undefined를 반환합니다.


https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/undefined



null
변수를 선언하고, null이라는 빈 값을 할당한 경우이다. 이런 빈 값 모두 if문에서 false로 형 변환된다.
빈 값의 경우 자료형에 따라 다름.
객체형 데이터의 빈값을 의미한다. (array, object 등)
문자열의 경우 ''
숫자의 경우 0

null은 JavaScript의 원시 값 중 하나로, 어떤 값이 의도적으로 비어있음을 표현하며 불리언 연산에서는 거짓으로 취급합니다.  null은 undefined와 같은 전역 객체의 식별자가 아닙니다. 대신 식별되지 않은 상태를 나타내며 해당 변수가 어떠한 객체도 가리키고 있지 않음을 표시합니다. API에서는 대개 객체를 기대했지만, 어떤 적합한 객체도 존재하지 않을 때 반환합니다.

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/null



console.log(undefined==null)이 true인 이유



비교연산자 ==는 자료형이 다르면 자동 형변환으로 자료형을 강제로 맞춰서 비교하는 비교연산자입니다. 

undefined와 null(object)은 자료형이 다르니 자바스크립트 엔진에서 통일해서 둘 다 값이 없는것으로 true를 반환합니다. 


이 경우 === 연산자(자료형까지 비교)를 사용하면 원하는 결과를 얻을 수 있습니다.



javascript에서 false가 return 되는 것


””             (빈 문자열) 
NaN          (Not a Number) 
undefined  (정의되지 않은 값) 
null           (Null값) 
false         (기본 boolean false) 
0              (숫자 0)


javascript null,undefined,empty 확인 방법



1. 배열이 비어있는지 확인

if!array.length )


2. 배열에 뭔가가 들어있는지 확인

if( array.length )


3. 문자열이 비어있는지 확인 // undefined, null 모두 포함

if(!string)


4.어떤 참조 변수가 false인지 판정할 때는 다음처럼 작성하지 마시고:

if ( foo === false )


true인지를 확인하도록 부정(!)을 사용하세요.

if ( !foo )


이렇게하면 foo의 값이 0, “”, null, undefined, NaN인 경우에도 참을 반환할 겁니다.


5. foo가 불린값 false를 갖는지를 확인하는 경우

if ( foo === false )


6. 어떠한 변수 foo의 값은 null이나 undefined 확인 : 강제형변환되는 ==를 사용

if ( foo == null )

   

== 를 사용하면, 판정하려는 변수의 값이 `null` 이나 `undefined` 일 때, 참을 반환할 것입니다.

하지만 `false` 나 "" 나 0 값을 가질 때에는 거짓을 반환할 것입니다.


잘못된 확인

if ( foo === null || foo === undefined )

false나 "", 또는 0의 값도 null이기 때문에 정확한 확인이 안됨 (위에서 말 한 것 처럼 빈 값을 의미)









컴퓨터 과학 분야에서 리터럴(literal)이란 소스 코드의 고정된 값을 대표하는 용어다.

댓글
  • 프로필사진 udonknowjs undefined도 '값' 입니다.
    empty라는것과 null도 엄연히 다릅니다.
    뇌피셜이 너무 많은글이네요
    2020.02.21 19:45
  • 프로필사진 구글링쟁이 k9e4h 답변 감사합니다 :D
    너무 아무것도 모를때 작성한 글이라 제가 봐도 이상한 부분이 많네요ㅜㅜ
    정정하도록 하겠습니다!
    2020.02.21 20:11 신고
댓글쓰기 폼