네이티브 객체(NAtive Objects)
자바스크립트 언어 규약(ECMAScript)명세의 정의된 내장 객체이다.
- native object, built-in object라고 부른다.
- 전역의 공통 기능을 제공하며 특정 환경(브라우저 등의 클라이언트 프로그램, 또는 Node.js 등의 런타임)에 종속되지 않는다.
- 네이티브 객체는 모든 내장 객체(built-in object)를 포함하며 내장 네이티브 생성자는 각자의 .prototype객체를 가진다.
- 프로토타입 객체에는 해당 객체의 하위 타입별로 고유한 로직이 담겨있다.
종류
- String()
- Number()
- Boolean()
- Array()
- Object()
- Function()
- RegExp()
- Date()
- Error()
- Symbol()
생성자 처럼 사용할 수 있지만 아닌 경우도 있다.
new String('Hello');
// string 'Hello'가 아닌 'Hello'를 감싸는 문자열 래퍼를 생성함
Object를 type으로 가지고 있는 값의 경우 [[Class]]라는 내부 프로퍼티가 추가로 있는데, 이때 이 프로퍼티를 접근하기 위해서는 Object.prototype.toString() 메서드에 값을 넣어 호출해야한다.
Object.prototype.toString.call([1,2,3]);
// '[object Array]'
원시값의 경우 null과 undefined는 각각 Null, Undefined로 나타난다.
그 밖의
문자열, 숫자, 불리언 등은 단순 원시값이며 자바스크립트는 원시값을 자동으로 객체 래퍼(Wrapper) 클래스로 박싱하여 오류를 방지한다.
var hello = 'Hello';
// 문자열은 원시값
hello.length; // 5
// 이때 length()로 접근하는데, 오류가 발생하지 않는다.
Symbol은 ES6에서 처음 선보인 새로운 원시값 타입이다.
충돌 염려없이 객체 프로퍼티로 사용가능한 특별한 '유일 값'이다.
Symbol은 프로퍼티명으로 사용할 수 있으나 프로그램 코드나 개발자 콘솔 창에서 실제 값을 보거나 접근하는 것은 불가능하다. (함수 객체의 정적 프로퍼티로 접근한다.)
Symbol은 네이티브 생성자이기 때문에 new를 붙이면 에러가 난다.
var hello = Symbol('Hello');
typeof hello // "symbol"
Object.getOwnPropertySymbols(hello); // [ Symbol(hello) ]
호스트 객체(Host Objects)
ECMASrcipt의 실행 환경을 만들기위해 window, XMLHTTPRequest 등 런타임환경(브라우저, Nodejs)에 의해 제공되는 객체를 말한다.
종류 (ex : 브라우저 환경일때)
ㄴ os, web browser를 실행환경에서 제공하는 호스트 객체라고 할 수 있음
- window (BOM, browser object model)
- 모든 객체의 유일한 최상위 객체인 전역객체, 브라우저 탭 또는 브라우저 창의 모델
- document (DOM, document object model)
- 현재 웹페이지의 모델
- location
- history
- XMLHttpRequest
- setTimeout
- getElementsByTagName
- querySelectorAll, …
참고
네이티브 객체 VS 호스트 객체
네이티브 객체
호스트 객체와 네이티브 객체
호스트객체와 네이티브객체