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 |