자바스크립트는 개발자가 별도로 정의하지 않아도 바로 사용할 수 있는 내장 생성자(built-in constructors)를 여러 가지 제공합니다. 대표적인 내장 생성자로는 Object(), String(), Number(), Boolean(), Array(), RegExp() 등이 있습니다.
Math는 왜 내장 생성자에 포함되지 않을까?
흥미로운 점은 Math 객체가 이러한 내장 생성자 목록에 포함되지 않는다는 것입니다. 그 이유는 Math가 일반적인 생성자 함수가 아니라 전역 객체(global object)이기 때문입니다. 따라서 Math에는 new 키워드를 사용할 수 없으며, 인스턴스를 생성하는 방식으로 활용할 수 없습니다. Math의 메서드와 속성(예: Math.random(), Math.PI)은 항상 Math 객체 자체를 통해 직접 접근해야 합니다.
내장 생성자 사용 예제
다음 예제에서는 다양한 내장 생성자를 사용하여 객체를 만들고, 각 변수의 타입을 typeof 연산자로 확인하여 출력합니다.
<html>
<body>
<script>
var a = new Object();
var b = new String();
var c = new Number();
var d = new Boolean();
var e = new Array();
var f = new RegExp();
document.write(
"a: " + typeof a + "</br>" +
"b: " + typeof b + "</br>" +
"c: " + typeof c + "</br>" +
"d: " + typeof d + "</br>" +
"e: " + typeof e + "</br>" +
"f: " + typeof f + "</br>"
);
</script>
</body>
</html>실행 결과
a: object b: object c: object d: object e: object f: object
결과 분석
출력 결과를 보면 알 수 있듯이, new 키워드로 생성된 모든 값의 타입은 "object"로 표시됩니다. 이는 자바스크립트에서 원시 타입(primitive type)이 아닌 참조 타입(reference type)은 모두 객체로 취급되기 때문입니다.
참고: 리터럴 표기법과의 차이
실무에서는 new String()과 같은 생성자 호출보다 문자열 리터럴("hello"), 숫자 리터럴(123), 배열 리터럴([])처럼 간결한 리터럴 표기법을 사용하는 것이 권장됩니다. 생성자로 만든 객체는 typeof 결과가 "object"로 나오지만, 리터럴로 만든 값은 "string", "number" 등 해당 원시 타입으로 나타나기 때문에 예상치 못한 동작을 방지할 수 있습니다.