<aside> 💡
자바스크립트 내에서의 객체는 다음과 같이 크게 3가지의 객체로 분류할 수 있다.
표준 빌트인 객체
⇒ ECMAScript 사양에 정의된 객체이다.
호스트 객체 ⇒ ECMAScript 사양에 정의되어 있지 않지만 자바스크립트 실행 환경에서 추가로 제공하는 객체를 말한다.
사용자 정의 객체
⇒ 표준 빌트인 객체와 호스트 객체처럼 기본 제공되는 객체가 아닌 사용자가 직접 정의한 객체를 말한다.
</aside>
<aside> 💡
자바스크립트에서는 Object, String, Number, Boolean, Symbol 등 40여 개의 표준 빌트인 객체를 제공한다.
Math, Reflect, JSON을 제외한 표준 빌트인 객체는 모두 인스턴트를 생성할 수 있는 생성자 함수 객체이다.
따라서 표준 빌트인 객체인 String, Number, Boolean, Function, Array, Date는 생성자 함수로 호출하여 인스턴스를 생성할 수 있다 !
</aside>
[ 예제 21- 01 ]
//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 Number); // 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'); // f anonymous(x)
console.log(typeof func); //function
// Array 생성자 함수에 의한 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
<aside> 💡
생성자 함수인 표준 빌트인 객체가 생성한 인스턴스의 프로토타입은 표준 빌트인 객체의 prototype 프로퍼티에 바인딩된 객체이다.
따라서, 표준 빌트인 객체의 프로토타입에 있는 다양한 기능의 빌트인 프로토타입 메서드를 사용할 수 있다 !
</aside>
[ 예제 21-02 ]
// String 생성자 함수에 의한 String 객체 생성
const strObj = new String('Lee'); // String("Lee")
// String 생성자 함수를 통해 생성한 strObj 객체의 프로토타입은 String.prototype 이다.
console.log(Object.getprototypeOf(strObj) === String.prototype); // true
[ 예제 21 - 03 ]
// Number 생성자 함수에 의한 Number 객체 생성
const numObj = new Number(1,5); // Number(1,5)
// toFixed는 Number.prototype의 프로토타입 메서드다.
// Number.prototype.toFixed는 소수점 자리를 반올림하여 문자열로 반환한다.
console.log(numObj.toFixed()); // 2
// isInteger는 Number의 정적 메서드이다.
// Number.isInteger는 인수가 정수(integer)인지 검사하여 그 결과를 Boolean으로 반환한다.
console.log(Number.isInteger(0.5)); // false
<aside> 💡
원시 값은 객체가 아니므로 프로퍼티나 메서드를 가질 수 없다.
</aside>