[Js] null, undefined

최진우·2020년 1월 13일
1

Js 정리

목록 보기
2/3
post-thumbnail
post-custom-banner

null, undefined


'값이 없음'을 나타내는 영단어. 값이 없다는 것은 그 값이 0조차 아니라는 뜻이다.

null의 사전적 의미는 값이 없음이라고 한다.

let a = null;
let b = 1;
let c;

console.log(a); // null
console.log(b); // 1
console.log(c); // undefined

각각 null, 1, 초기화 되지 않은 값들을 콘솔에 찍어본다면 null, 1, undefined가 나온다. 즉 값을 초기화 하지 않은 변수는 undefined 가 나온다는 것을 알 수 있다. 이 부분이 nullundefined의 차이점 인것 같다. 많은 문서에서 특정 값을 가지지 않은 것을 undefined가 아닌 null사용이 바람 직하다고 한다.

let a = null;
let b = 1;
let c;

console.log(a.value); // null pointer exception
console.log(b.value); // undefined
console.log(c.value); // null pointer exception

위의 코드는 각각 변수들을 참조하는 것이다.
이때 값이 없는 a, c를 참조하게 되면 에러가 발생하게 된다. 1이라는 값을 가진 b역시 참조할 value가 없기 때문에 undefined가 나오게 된다.

빈 문자열, 빈 배열, 빈 객체


const a = '';
const b = [];
const c = {};

console.log(a); // 
console.log(b); // []
console.log(c); // {}

모두 null이나 undefined가 아니다. 이를 증명하기 위한 예제가 아래에 있다.

const a = '';
const b = [];
const c = {};

console.log(a.length); // 0
console.log(b.length);  // 0
console.log(Object.keys(c)); // []
console.log(Object.keys(null)); // null pointer exception

위의 예제에서 모두 값이 잘 나오고 마지막 예시에서는 null을 참조하여 에러가 나게 된다.

참, 거짓

그럼 Js에서 false라고 판단하는 것들은 무엇이 있을까?

const a = null
const b = undefined;
const c = 0;
const d = [];
const e = {};
const f = '';

// == true로 비교
if (a == true) {
  console.log('null');
}
if (b == true) {
  console.log('undefined');
}
if (c == true) {
  console.log('0');
}
if (d == true) {
  console.log('[]');
}
if (e == true) {
  console.log('{}');
}
if (f == true) {
  console.log('""');
}

// 값 자체 비교
if (a) {
  console.log('null');
}
if (b) {
  console.log('undefined');
}
if (c) {
  console.log('0');
}
if (d) {
  console.log('[]');
}
if (e) {
  console.log('{}');
}
if (f) {
  console.log('""');
}

이런식으로 확인 코드를 짜보긴 했다.
결과는 위와 == true로 비교했을 때는 아무것도 콘솔에 찍히지 않았다.
하지만 두번째 값으로 비교했을 때는 조금 달랐다.

nullundefined0[]{}''
XXXOOX

위와 같이 빈 배열과 빈 객체를 제외하고는 모두 거짓으로 판단한다.

항사 헷갈려서 직접 구현해보며 글을 작성 해봤다.

profile
대구소프트웨어고등학교 4기, 재학중
post-custom-banner

0개의 댓글