undefined, null, NaN의 차이

JINSUNG LEE·2021년 5월 11일
1
post-thumbnail



Javascript에서는 값의 오류가 발생하면 undefined, null, NaN 세가지 타입을 볼 수가 있다.

하지만 오류가 발생했다고 코드가 중단되는 것이 아닌 멀쩡히 출력되어 버린다.

그렇기에 위의 세가지 타입 차이는 명백히 구분할줄 아는 것이 중요하다.


undefined

undefined 는 변수를 선언은 하였지만, 값을 할당하지 않을 경우의 상태를 나타낸다.(변수의 초기값인 셈)


const word

console.log(word) // undefined

원시 자료형에서의 undefined


Boolean(undefined)  // false
Number(undefined)   // NaN
String(undefined)	// 'undefined'

typeof(undefined)   // 'undefined'

null

null 은 명시적으로 값이 비어있는 상태를 나타낼 때 사용된다.


const word = null

console.log(word) // null

원시 자료형에서의 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의 차이는?

undefinednull 는 등록, 저장 여부이다.

undefined
변수의 값이 등록 되어있지 않기 때문에 초기값으로 자동 정의된 것이다.
null
값은 값이지만 값으로써 의미없는 특정한 값이 등록되어 있는 것이다.

undefined 는 미리 선언된 전역변수(전역 객체의 프로퍼티)이며,

null 은 선언, 등록을 하는 키워드인 것이다.


NaN

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

원시 자료형에서의 NaN


Boolean(NaN)  // false
Number(NaN)   // NaN
String(NaN)   // 'NaN'

typeof(NaN)   // 'number'



	     			 null.. 붙잡을 노래~ 🤝 👨‍❤️‍👨 
          		     죄송합니다;; 쓸만한 짤이 없어서...



끝으로 undefined, null, NaN 공통적인 부분으로 투명화된 값이지만,

엄연히 무시해서는 안될 값이라는 것을 명심해야 한다.

profile
https://californialuv.github.io/Tech_Blog 이사 갔어용 🌎 🚀

0개의 댓글