네이티브는 자바스크립트 내장함수다.
많이 쓰는 네이티브 내장함수들
String()
Number()
Boolean()
Array()
Object()
Function()
RegExp()
Date()
Error()
Symbol()
생성자 함수 방식으로 문자열 또는 숫자를 만들면 그 값은 객체 래퍼에 감싸져서 반환되기 때문에 typeof 값은 "object"가 된다.
let a = new String( 'abc' );
typeof a; // object
let b = new Number( 2 );
typeof b; // object
이런 객체 형태로 반환된 값을 문자열로 바꿔주는 것이 문자열의 함수 toString() 이다.
let a = 2;
a.toString(); // "2"
typeof a.toString(); // string
let b = new Number( 2 );
b.toString(); // "2"
typeof b; // number - 불변 값이기 때문에 b는 그대로 number
이제 책의 예제를 살펴보자.
var a = new String( "abc" );
typeof a; // "object" - "String"이 아니다!
a instanceof String; // true
// 문자열의 toString이 아니다.
// Object가 String의 부모 클래스이기 때문에 String 클래스에서 toString을 덮어썼다고 보면 됨.
Object.prototype.toString.call( a ); // "[object String]"
console.log( a ); // String {"abc"}
콘솔을 찍어보면 String {"abc"} 라고 되어있고, 열어보면 아래와 같은 정보가 나온다.
{0: "a", 1: "b", 2: "c", length: 3, [[PrimitiveValue]]: "abc"} // 브라우저마다 조금씩 다르게 표현될 수 있다.
요지는 new String( "abc" ) 처럼 문자열을 생성하면 문자가 아닌 객체로 반환된다는 것이다.