- 표준 빌트인 객체
- 호스트 객체
- 사용자 정의 객체
// String 생성자 함수에 의한 String 객체 생성
const strObj = new String('Lee'); // String {"Lee"}
console.log(typeof strObj); // object
// Number 생성자 함수에 의한 Number 객체 생성
const numObj = new Number(123); // Number {123}
console.log(typeof numObj); // object
// Boolean 생성자 함수에 의한 Boolean 객체 생성
const boolObj= new Boolean(true); // Boolean {true}
console.log(typeof boolObj); // object
// Function 생성자 함수에 의한 Function 객체(함수) 생성
const func = new Function('x', 'return x * x'); // ƒ anonymous(x )
console.log(typeof func); // function
// Array 생성자 함수에 의한 Array 객체(배열) 생성
const arr = new Array(1, 2, 3); // (3) [1, 2, 3]
console.log(typeof arr); // object
// RegExp 생성자 함수에 의한 RegExp 객체(정규 표현식) 생성
const regExp = new RegExp(/ab+c/i); // /ab+c/i
console.log(typeof regExp); // object
// Date 생성자 함수에 의한 Date 객체 생성
const date = new Date(); // Fri May 08 2020 10:43:25 GMT+0900 (대한민국 표준시)
console.log(typeof date); // object
생성자 함수인 표준 빌트인 객체가 생성한 인스턴스의 프로토타입은 표준 빌트인 객체의 prototype 프로퍼티에 바인딩된 객체다.
const str = 'hello';
// 원시 타입인 문자열이 프로퍼티와 메서드를 갖고 있는 객체처럼 동작한다.
console.log(str.length); // 5
console.log(str.toUpperCase()); // HELLO
문자열, 숫자, 불리언 값에 대해 객체처러 접근하면 생성되는 임시 객체를 래퍼 객체라 한다.
문자열, 숫자, 불리언, 심벌 이외의 원시값, 즉 null과 undefined는 래퍼 객체를 생성하지 않는다. 따라서 null과 undefined 값을 객체처럼 사용하면 에러가 발생한다.
전역 객체는 자바스크립트 환경에 따라 지칭하는 이름이 제각각이다. 브라우저 환경에서는 window(또는 self, this, frames)가 전역 객체를 가리키지만 Node.js 환경에서는 global이 전역 객체를 가리킨다/
let이나 const 키워드로 선언한 전역 변수는 전역 객체의 프로퍼티가 아니다.
빌트인 전역 프로퍼티는 전역 객체의 프로퍼티를 의미한다.
- Infinity : 무한대를 나타내는 숫자값 Infinity를 갖는다.
- NaN : 숫자가 아님을 나태는 숫자값 NaN을 갖는다.
- undefined : 원시타입 undefined를 값으로 갖는다.
빌트인 전역 함수는 애플리케이션 전역에서 호출할 수 있는 빌트인 함수로서 전역 객체의 메서드다.
- eval : 기존의 스코프를 런타임에 동적으로 수정한다.
- isFinite : 전달받은 인수가 정상적인 유한수인지 검사한다.
- inNaN : 전달받은 인수가 NaN인지 검사한다.
- parseFloat : 전달받은 문자열 인수를 실수로 해석하여 반환한다.
- parseInt : 전달받은 문자열 인수를 정수로 해석하여 반환한다.
- encodeURI : 완전한 URI를 문자열로 전달받아 이스케이프 처리를 위해 인코딩한다.
- decodeURI : 인코딩된 URI를 인수로 전달받아 이스케이프 처리 이전으로 디코딩한다.
- encodeURIComponent : URI 구성 요소를 인수로 전달받아 인코딩한다.
- decodeURIComponent : 매개변수로 전달된 URI 구성 요소를 디코딩한다.
// 전역 변수 x는 호이스팅이 발생한다.
console.log(x); // undefined
// 전역 변수가 아니라 단지 전역 객체의 프로퍼티인 y는 호이스팅이 발생하지 않는다.
console.log(y); // ReferenceError: y is not defined
var x = 10; // 전역 변수
function foo () {
// 선언하지 않은 식별자에 값을 할당
y = 20; // window.y = 20;
}
foo();
// 선언하지 않은 식별자 y를 전역에서 참조할 수 있다.
console.log(x + y); // 30
변수가 아니라 단지 프로퍼티인 y는 delete 연산자로 삭제 할 수 있다. 전역 변수는 프로퍼티이지만 delete 연산자로 삭제 할 수 없다.