Javascript에서는 값의 오류가 발생하면 undefined, null, NaN 세가지 타입을 볼 수가 있다.
하지만 오류가 발생했다고 코드가 중단되는 것이 아닌 멀쩡히 출력되어 버린다.
그렇기에 위의 세가지 타입 차이는 명백히 구분할줄 아는 것이 중요하다.
undefined
는 변수를 선언은 하였지만, 값을 할당하지 않을 경우의 상태를 나타낸다.(변수의 초기값인 셈)
const word
console.log(word) // undefined
Boolean(undefined) // false
Number(undefined) // NaN
String(undefined) // 'undefined'
typeof(undefined) // 'undefined'
null
은 명시적으로 값이 비어있는 상태를 나타낼 때 사용된다.
const word = null
console.log(word) // null
Boolean(null) // false
Number(null) // 0
String(null) // 'null'
typeof(null) // 'object'
여기서 typeof(null)
은 도대체 왜 object가 출력된걸까?
일종의 typeof 연산자 버그라고 보면 좋다.
typeof 원리 참고
typeof 내부 원리는 아래의 경우와 같다.
if(is_undefined?) {
return undefined; // undefined 출력
} else if(is_object?) {
if(is_function?) {
return function; // function 출력
} else {
return object; // object 출력
}
} else if(is_number?) {
return number // number 출력
} else if(is_string?) {
return string // string 체크
} else if(is_boolean?) {
return boolean // boolean 체크
}
typeof 구현에 null 요소가 누락된 것을 보아 결국 'object'가 나오는 것이다.
undefined
와 null
는 등록, 저장 여부이다.
undefined
변수의 값이 등록 되어있지 않기 때문에 초기값으로 자동 정의된 것이다.
null
값은 값이지만 값으로써 의미없는 특정한 값이 등록되어 있는 것이다.
undefined
는 미리 선언된 전역변수(전역 객체의 프로퍼티)이며,
null
은 선언, 등록을 하는 키워드인 것이다.
NaN
의 뜻은 not a number의 함축한 것이다.
즉, 숫자가 아닌 다른 원시형으로 해석하여 출력된 값이다.
function sanitise(x) {
if (isNaN(x)) { // isNaN은 NaN인지 판별하는 메서드
return NaN;
}
return x;
}
console.log(sanitise('1')); // 1
console.log(sanitise('NotANumber')); // NaN
Boolean(NaN) // false
Number(NaN) // NaN
String(NaN) // 'NaN'
typeof(NaN) // 'number'
null.. 붙잡을 노래~ 🤝 👨❤️👨
죄송합니다;; 쓸만한 짤이 없어서...
끝으로 undefined, null, NaN 공통적인 부분으로 투명화된 값이지만,
엄연히 무시해서는 안될 값이라는 것을 명심해야 한다.