드림코딩 JS강의를 들으며 공부하던 중

3강, 4강에서 이상한 점을 발견해서 정리하려고 한다.

 

 

Boolean 자료형을 배우던 중

0, null, undefined, NaN,  '' 이 false로 판정된다는 이야기를 봤다.

 

 

그리고 VS code를 키고

 

아래와 같이 입력한 후 콘솔 창을 확인했더니

이상한 결과가 나왔다.

console.log(false == 0);  // true
console.log(false == ''); // true
console.log(false == null); // false
console.log(false == undefined); // false
console.log(false == NaN); // false
console.log(false == []); // true

 

왜 null, undefined NaN은 false와 == 연산자에서 true가 나오지 않는걸까

또 [] 는 false와 == 연산자에서 true가 나오는데 왜 위에 수업에서 이야기하지 않았을까

 

 

'use strict'

console.log(null == undefined); //true
console.log(null == NaN); //false
console.log(undefined == NaN); //false

또 다음 입력 테스트는 이런 결과가 나왔다.

null 과 undefined 끼리의 비교는 true

NaN과의 비교는 false로 나왔다.

 

 

 

 

1. Boolean, if 연산자에서의 false 취급

 

영상에서 말한 false와 같다는 이야기는 비교 연산자 == 가 아닌

Boolean 연산자에서 false 취급을 받는다는 이야기였다.

if (undefined){
    console.log('true');
}
else {
    console.log('false');
}

즉 다음과 같은 식에서 undefined는 false로 취급을 받아 콘솔에 'false' 를 출력하게 된다.

Boolean(undefined) 역시 false를 반환한다.

 

 

if ([]){
    console.log('true');
}
else {
    console.log('false');
}

그래서 이 코드에선 [] 가 true로 취급을 받아 콘솔에 'true'를 출력했다.

 

 

 

2. undefined, null, NaN의 타입 비교

 

// undefined & null 타입 비교
// undefined 대신 null 대입해도 동일한 결과 반환

undefined == undefined // true
undefined == 0 // false
undefined == false // false
undefined == null // true
undefined == '' // false
undefined == NaN // false
undefined == [] // false


// NaN 타입 비교

NaN == NaN // false
NaN == 0 // false
NaN == false // false
NaN == null// false
NaN == undefined // false
NaN == '' // false
NaN == [] // false

 

 

3. undefined 와 null의 차이점

 

let a;
console.log(a); // undefined 출력

let b = null;
console.log(b); // null 출력

a == b // true
a === b // false

 

undefined는 선언된 변수에 아직 아무 값을 넣지 않았을때 나온다.

즉 C, C++의 쓰레기 값과 같다.

 

다음과 같은 상황에서 undefined 자료형이 반환된다.

  • 값을 할당하지 않은 변수
  • 메서드와 선언에서 변수가 할당받지 않은 경우
  • 함수가 값을 return 하지 않았을 때

 

null은 존재하지 않는 값 또는 유효하지 않은 주소 혹은 object를 가리키는 참조이다.

C, C++ 의 NULL과 같다.

 

즉 변수 값이 null임은 변수의 선언 후 초기화 까지 된 상황이고

undefined 는 초기화 되지 않음을 의미한다.

 

물론 a = undefined; 라는 식으로 초기화 할 수 있지만

추천하지 않는 방법이고

변수의 초기화는 null을 이용하는 것이 좋다.

 

그리고 변수를 비교할때는 그냥 === 비교 연산자를 사용하자.

 

 

 

 

 

 

 

 

 

+ Recent posts