Null(널) 과 Undefined는 다르다.
코딩을 하다보면 자바스크립트만큼 유격이 많은 언어를 찾기가 어렵습니다.
그만큼 유연하고 접근성이 좋지만, 뜻하지 않은 문제를 일으킬 수도 있습니다.
그중 하나가 Null 과 Undefined 입니다.
자바스크립트에는 다른 개발언어에서와 같은 Null(널) 이 있습니다.
데이터베이스나 다른 개발 언어에서는 초기화가 되지 않은 변수, 또는 필드가 됩니다.
자바스크립트에서는 조금 달라서 null 은 변수에 null이 할당한 상태, 즉 변수 객체(Object)가 생성된 상태가 됩니다.
Undefined는 변수의 객체가 생성되지 않는 상태의 변수 즉 아무것도 할당되지 않은 Undefined 타입이 됩니다.
둘다 값은 없지만 하나는 객체 자체는 생성된 것(null(이고, 하나는 객체 자체도 생성되지 않은 것(undefined)입니다.
웹 브라우저 개발자 도구(F12) 콘솔에 아래와 같이 입력해 타입을 확인해 보면 타입이 다르게 나오는 것을 알 수 있습니다,
console.log(typeof null);console.log(typeof undefined);
둘을 비교할 때 어떻게 비교하냐에 따라 둘은 같을 수도 있고 다를 수도 있습니다.
var a; <- undefined
var b = null; <- null
변수 둘을 비교할 때
if( a == b){}
이렇게 비교하면 true가 반환됩니다.
if(a === b){}
이렇게 비교하면 false가 반환됩니다.
이퀄 2개로 비교하는 "==" 는 타입체크 없이 값만을 비교합니다. a와 b 모두 값이 없으므로 true가 됩니다.
"===" 는 값과 함께 타입까지 비교합니다.(엄격한 비교) 둘다 값은 없지만 타입이 null과 undefined로 다르므로 false가 됩니다.
자바스크립트 코딩 습관을 들일 때는
변수를 미리 할당해 사용할 때 선언만 할지, null을 할당해 사용할지 한가지로 통일해서 사용해야 합니다.
또한 "==" 보다는 "==="를 사용해서 자동 캐스팅으로 인해 알 수 없는 오류로 빠지는 경우를 최대한 피하는 것이 좋습니다.