자바스크립트 객체의 분류
- 표준 빌트인 객체: ECMAScript 사양에 정의된 객체. 실행환경과 관계없이 항상 사용 가능
- 호스트 객체: 실행 환경에서 추가적으로 제공하는 객체
- 사용자 정의 객체: 기본 제공되는 객체가 아닌 사용자가 직접 정의한 객체
표준 빌트인 객체
- 생성자 함수 객체: String, Number, Boolean, Function, Array, Date
- 생성자 함수가 아닌 객체: Math, Reflect, JSON
래퍼 객체
원시 값이 있는데도 객체를 생성하는 표준 빌트인 생성자 함수가 존재하는 이유는?
원시 값을 객체처럼 사용하면 자바스크립트 엔진은 암묵적으로 연관된 객체로 변환해준 다음
다시 원시 값으로 되돌리기 때문이다.
이처럼 문자열, 숫자, 불리언 값에 대해 객체처럼 접근하면 생성되는 임시 객체를 래퍼 객체라 한다.
그 후 래퍼 객체는 가비지 컬렉션의 대상이 된다.
*null과 undefined는 래퍼객체를 생성하지 않는다.
전역 객체
모든 빌트인 객체의 최상위 객체다.
- 전역 객체는 개발자가 의도적으로 만들 수 없다. (생성자 함수 제공X)
- 전역 객체의 프로퍼티 참조시 window(또는 global) 생략 가능
- 빌트인 전역 프로퍼티 : Infinity, NaN, undefined
- 빌트인 전역 함수 : eval, isFinite, isNaN, parseFloat, encodeURI/decodeURI
- 암묵적 전역
선언 하지 않은 식별자에 값을 할당하면 전역 객체의 프로퍼티가 되어 마치 전역 변수처럼 동작한다.
변수가 아니므로 변수 호이스팅이 발생하지 않고 delete 연산자로 삭제할 수 있다.
// 전역 변수 x는 호이스팅이 발생한다. console.log(x); // undefined // 전역 변수가 아니라 단지 전역 객체의 프로퍼티인 y는 호이스팅이 발생하지 않는다. console.log(y); // ReferenceError: y is not defined var x = 10; // 전역 변수 function foo() { y = 20; // 선언하지 않은 식별자에 값을 할당 console.log(x + y); } foo(); // 30 // 선언하지 않은 식별자 y를 전역에서 참조할 수 있다. console.log(x + y); // 30 console.log(window.x); // 10 console.log(window.y); // 20 delete x; // 전역 변수는 삭제되지 않는다. delete y; // 프로퍼티는 삭제된다. console.log(window.x); // 10 console.log(window.y); // undefined
'FRONT > JAVASCRIPT' 카테고리의 다른 글
[javascript] 실행 컨텍스트 (0) | 2021.06.29 |
---|---|
[javascript] this (0) | 2021.06.26 |
[javascript] strict mode란? (0) | 2021.06.25 |
[javascript] 캔버스(Canvas)로 그림판 만들기(4) 이미지 저장하기 (0) | 2021.06.25 |
[javascript] 캔버스(Canvas)로 그림판 만들기(3) 색상 채우기-fillRect() (0) | 2021.06.25 |