자바스크립트 - undefined / null

이한결·2023년 1월 24일
0

부트 캠프

목록 보기
26/98
post-thumbnail

1월 24일 여정 16일차이다.
오늘은 설날 휴일 마지막 날이다.

var a;
console.log(a); // undefined
console.log(typeof a); // undefined
var nullType = null;
console.log(typeof null); // object

어떤 때는 undefined가 뜨고 어떤 때는 null이 브라우저 콘솔에 나타난다. 둘의 차이점이 무엇일까?

오늘의 Today I Learned

problem

undefined와 null은 나에게 너무 친숙한 단어이다. 코드를 짜다보면 쉽게 볼 수 있는 단어들이다. 그런 단어들을 조금 더 자세히 알아보고 싶어졌다.

try

모던 JavaScript 튜토리얼, MDN 문서는 솔직히 나에게 너무 어렵다. 그래서 다른 것들을 참고하게 되었다.

solve

일단 undefined를 보면 이러하다.
undefined란 '아무런 값도 할당받지 않은 상태'를 의미한다. 밑에 코드를 보면 이해가 쉽다.

var a;
console.log(a); // undefined
console.log(typeof a); // undefined

맞다, 맨 처음 위에서 소개했던 코드이다. 이렇게 a를 선언했지만 그곳에 아무것도 값을 할당하지 않으면 undefined이다. 그러면 개발자들이 값을 할당하지 않고 비어있다고 나타내고 싶을때 undefined를 써도 될까?

결론부터 말하자면 'NO'이다. undefined는 예약어가 아니기 때문에, 전역 범위 외에서 변수 이름으로 사용할 수 있다. 그러나 유지보수와 디버깅에 난해한 상황을 겪을 수 있기 때문에 피하는 것이 매우 좋다.

다음 null을 보자.
null은 특이한 것들이 많다. Null과 NULL등이 모두 다르다는 것이다. null은 '존재하지 않는 값'을 의미한다.

var nullType = null;
console.log(typeof null); // object

위의 undefined와 다르게 개발자들이 값이 비어있다는 것을 표현하기 위해 의도적으로 사용하기도 한다.
또한 null은 객체이며, 함수가 유효한 값을 반환할 수 없는 경우에 명시적으로 null을 반환하기도 한다.

위에 둘은 공통점이 있다. 둘다 각각 타입명의 값이 유일하다. undefined는 undefined이며, null은 null이 유일하다.

knew

찾아보면서 알게 된 것이지만, typeof null은 출력하면 object이지만, 이는 여전히 원시 타입이어서 자바스크립트는 버그로 간주한다고 한다.
또한 undefined == null은 true이다.

마지막으로

설날의 마지막 날도 끝이 났다. 다시 null의 마음으로 내일부터 더 열심해야겠다.

profile
평범한 삶을 위하여

0개의 댓글