[Typescript] constructor VS typeof

hellow_coding·2023년 5월 23일

constructor

JavaScript에서 constructor는 객체가 생성될 때 호출되는 특수한 메서드를 가리킵니다. 이 메서드는 객체가 처음 생성될 때 자동으로 호출되며, 객체의 속성을 초기화하거나 생성자 함수를 통해 객체를 생성하는 데 필요한 코드를 실행합니다.

TypeScript의 클래스에서 constructor 메서드는 클래스의 인스턴스를 만들고 초기화하는 데 사용됩니다. 클래스 정의에서 constructor를 명시적으로 정의하지 않으면 TypeScript는 빈 constructor를 기본적으로 제공합니다.

let obj = {};
console.log(obj.constructor === Object); // true

let arr = [];
console.log(arr.constructor === Object); // false, arr.constructor is Array

let func = function() {};
console.log(func.constructor === Object); // false, func.constructor is Function

❓ typeof 연산자와 constructor 속성의 차이점?

JavaScript에서 변수나 객체의 타입을 확인하는 두 가지 주요 방법입니다. 두 방법 모두 유용하지만 서로 다른 목적과 용도에 적합합니다.

typeof : 이 연산자는 피연산자의 데이터 타입을 문자열로 반환합니다. typeof는 number, string, boolean, object, function, undefined, symbol 등의 기본 데이터 타입을 확인하는 데 가장 적합합니다. 하지만 null과 객체는 모두 object로 반환되므로, 구체적인 객체 타입을 알아내기 어렵습니다.

typeof 123; // 'number'
typeof 'hello'; // 'string'
typeof {}; // 'object'
typeof null; // 'object'
typeof function() {}; // 'function'

constructor : 이 속성은 객체가 생성된 생성자 함수를 참조합니다. 따라서 constructor는 객체의 특정 클래스나 생성자를 확인하는 데 더 적합합니다. 기본 데이터 타입(예: 숫자, 문자열, 불리언)에는 사용할 수 없으며, 대상이 객체일 때만 사용할 수 있습니다.

({}).constructor === Object; // true
([]).constructor === Array; // true
(new Date()).constructor === Date; // true

typeof는 기본 데이터 타입을 확인하고, constructor는 객체의 특정 생성자나 클래스를 확인하는 데 사용합니다.


❗ JavaScript에서 원시 타입(예: 숫자, 문자열, 불리언)은 기본적으로 객체가 아니며, 따라서 constructor 프로퍼티를 직접 가지지 않습니다.

하지만 JavaScript는 원시 타입에 접근할 때, 이들 원시 타입을 해당 원시 타입의 래퍼 객체로 일시적으로 "박싱(Boxing)"하므로, 이러한 원시 타입에 대해 constructor와 같은 프로퍼티나 메서드를 호출할 수 있습니다.

("hello").constructor === String; // true

이는 자동 변환이 일어나기 때문에 가능한 것이며, 이는 모든 상황에서 동일하게 작동하지 않을 수 있습니다.
예를 들어, new String("hello")와 "hello"는 서로 동등하지 않습니다. 전자는 String 객체이며 후자는 기본 string 데이터 타입입니다.

new String("hello") === "hello"; // false
profile
꿈많은 개발자

0개의 댓글