본문 바로가기

Backend/Javascript

[Javascript] - Bottom value

Bottom Value (빈 값)

 

- 빈 값은 재귀적 데이터 구조의 긑을 가리키거나 값이 없음을 뜻하는 특수한 값입니다.

 

프로그래밍 언어에서 빈 값은 nil, none, nothing, null 과 같은 이름을 가집니다.

 

- 자바스크립트는 두 개의 빈 값, null 과 undefined 를 갖고 있습니다.

 

자바스크립트 객체에선 오로지 null 과 undefined 만이 빈 값이며 이들 값에서 속성을 읽어오려고 하면 예외가 발생합니다.
null 과 undefined 는 같지 않습니다.

둘은 비슷하지만, 어떤 경우에는 서로 다르게 동작합니다. 이는 헷갈릴 여지가 있다는 말이며, 둘 중 하나만 사용한다면

더 좋은 프로그램이 될 것입니다. 그래서 null 을 최소한으로 사용하고, undefined 를 주로 사용하겠습니다.

 

- undefined 는 자바스크립트 스스로가 값으로 사용합니다.

 

let 이나 var 구문으로 변수를 정의하고 초기화하지 않으면 자바스크립트는 묵시적으로 이 변수값을 undefined 로 초기화합니다.

함수에 충분한 수의 인자를 넘겨 주지 못하면, 남는 매개변수의 값은 undefined 로 설정됩니다.

객체에 특정 속성 값을 요청했는데 객체가 그 속성을 가지고 있지 않다면 undefined 로 설정됩니다.

배열에 특정 요소를 요청했는데 그 요소가 배열에 없다면 이 역시 undefined 를 반환합니다.

 

- null 을 쓰는 유일한 경우는 새로 빈 객체를 만들기 위해 Object.create(null) 을 사용할 때입니다.

 

- typeof null 은 'null' 이 아닌  'object' 를 반환합니다.

 

이로 인해 null 인 객체가 빈 값인지 검사하고자 했다면 이러한 코드는 에러가 날 수 있습니다.

undefined 는 (typeof tmp === 'undefined') 가 동작하지만, null 은 그렇지 않기 때문입니다.

이 점이 null 을 안 쓰고 undefined 를 쓰려는 또 다른 이유입니다.

 

- undefined 는 null 을 쓰는 것보다는 낫지만, 경로 문제라는 골칫거리가 있습니다.

 

객체에 없는 속성에 대한 값을 요청하면 undefined 를 반환한다는 점, 또한 undefined 는 객체가 아니기 때문에 undefined 에서 속성 값을 읽으려고 시도하면 예외가 발생합니다. 이러한 경우 아래와 같이 그닥 좋은 코드는 아니지만, 경로 문제를 해결할 수 있습니다.

 

const name = (
  myPerson
  && myPerson.name
  && myPerson.name.first
);

 

&& 연산자는 왼쪽이 false 면 나머지는 평가하지 않기에, 왼쪽의 표현식이 undefined 가 아닐때에만 오른쪽 표현식이 계산되도록 위와 같이 표현할 수 있습니다.

 

출처 : 자바스크립트는 왜 그 모양일까?

 

'Backend > Javascript' 카테고리의 다른 글

[Javascript] - Function  (0) 2020.11.28
[Javascript] - Statement  (0) 2020.11.21
[Javascript] - String  (0) 2020.11.07
[Javascript] - Object  (0) 2020.10.31
[Javascript] - Array  (0) 2020.10.24