드림코딩 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을 이용하는 것이 좋다.
그리고 변수를 비교할때는 그냥 === 비교 연산자를 사용하자.
'장고는 못말려' 카테고리의 다른 글
장고로 REST API 구현하기 - 4 (Serializer 응용) (3) | 2022.07.01 |
---|---|
REST API 장고로 구현하기 - 3 (연습 프로젝트 구현) (2) | 2022.06.22 |
REST API 장고로 구현하기 - 2 (연습 프로젝트 준비) (2) | 2022.06.22 |
REST API 장고로 구현하기 - 1 (웹 기본지식) (2) | 2022.06.22 |
VS CODE 단축키 정리 - MAC (0) | 2022.03.26 |