자바스크립트에서 '없음'을 나타내는 값 undefined와 null이 존재한다.
1. undefined
undefined는 사용자가 명시적으로 지정할 수도 있지만, 값이 존재하지 않을 때 자바스크립트 엔진이 자동으로 부여하는 경우도 있다.
자바스크립트 엔진은 사용자가 응당 어떤 값을 지정할 것이라고 예상되는 상황임에도 실제로 그렇게 하지 않았을 때 undefined를 반환한다.
크게 3가지 경우가 존재한다.
(1) 값을 대입하지 않은 변수, 즉 데이터 영역의 메모리 주소를 지정하지 않은 식별자에 접근할 때
(2) 객체 내부의 존재하지 않는 프로퍼티에 접근하려고 할때
(3) return 문이 없거나 호출되지 않는 함수의 실행 결과
출력 결과
Undefined와 배열
'비어있는 요소'와 'undefined를 할당한 요소'는 출력 결과부터 다르다. '비어있는 요소'는 순회와 관련된 많은 배열 메서드들의 순회 대상에서 제외된다.
빈 요소와 배열의 순회
사용자가 직접 undefined를 할당한 arr1에 대해서는 일반적으로 알고 있는 대로 배열의 모든 요소를 순회해서 결과를 출력한다.
하지만, arr2에 대한 결과를 보면, 각 메서드들이 비어 있는 요소에 대해서는 어떠한 처리도 하지 않고 건너뛰었음을 알 수 있다.
'배열도 객체'라는 말을 생각해보면 당연한 것이다.
undefined의 의미 차이
사용자가 명시적으로 부여한 경우와 비어있는 요소에 접근하려 할 때 반환되는 두 경우 'undefined'의 의미를 구분할 수 있다.
전자의 undefined는 그 자체로 값이다. undefined가 비록 '비어었음'을 의미하긴 하지만 하나의 값으로 동작하기 때문에 이때의 프로퍼티나 배열의 요소는 고유의 키값(프로퍼티 이름)이 실존하게 되고, 따라서 순회의 대상이 될 수 있다. 한편 사용자가 아무것도 하지 않은 채로 접근했을 때 자바스크립트 엔진이 하는 수 없이 반환해주는 undefined는 해당 프로퍼티 내지 배열의 키값(인덱스) 자체가 존재하지 않음을 의미한다.
'비어있음'을 명시적으로 나타내고 싶을 땐, undefined가 아닌 null을 사용하면 된다.
이런 규칙을 따르는 한 undefined는 오직 '값을 대입하지 않은 변수에 접근하고자 할 때 자바스크립트 엔진이 반환해주는 값'으로서만 존재한다.
단, 한가지 주의할 점 -> typeof null은 object라는 점 / 자바스크립트 자체의 버그 이다.
'2022년' 카테고리의 다른 글
2 .실행 컨텍스트,호이스팅 (0) | 2021.12.12 |
---|---|
Components와 Props (0) | 2021.12.11 |
엘리멘트 렌더링 (0) | 2021.12.08 |
1.2 변수 복사 비교 ~ (0) | 2021.12.07 |
1.1 데이터 타입의 종류 (0) | 2021.12.04 |