Object.prototype.toString()
BaselineWidely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Object
객체의 메서드인toString()
은 해당 object를 표현하는 문자열을 반환합니다. 이 메서드는 사용자가타입 강제 변환을 통해 파생된 객체에서 재정의할 수 있습니다.
시도해 보기
function Dog(name) { this.name = name;}const dog1 = new Dog("Gabby");Dog.prototype.toString = function dogToString() { return `${this.name}`;};console.log(dog1.toString());// Expected output: "Gabby"
구문
toString();
매개변수
기본적으로toString()
은 매개변수가 없습니다. 그러나 이 메서드를 재정의한Object
를 상속받은 객체의 경우 매개변수를 취할 수 있습니다. 예를들어,Number.prototype.toString()
와BigInt.prototype.toString()
메서드의 경우 선택적으로 기수(radix)를 매개변수로 취합니다.
반환 값
객체를 표현하는 문자열을 반환합니다.
설명
자바스크립트는객체를 원시 값으로 변환하기 위해toString
메서드를 호출합니다. 당신은toString
메서드를 직접 부를 일이 거의 없습니다. 자바스크립트는 원시 값이 있어야 할 곳에서 객체를 마주치면 자동으로 해당 메서드를 호출합니다.
이 메서드는문자열 변환에 의해 우선적으로 호출되지만,숫자 변환과원시 타입 변환은valueOf()
를 우선적으로 호출합니다. 그러나 기본valueOf()
메서드는 객체를 반환하므로, 그 객체가valueOf()
를 재정의하지 않았다면 보통toString()
메서드가 마지막에 호출됩니다. 예를들어,+[1]
은1
을 반환하는데, 그 이유는+[1]
의toString()
메서드가"1"
을 반환하고 이 값이 숫자로 변환되기 때문입니다.
Object.prototype
를 상속받는 모든 객체(null
-프로토타입 객체를 제외한)들은toString()
메서드를 상속받습니다. 커스텀 객체를 만들 때toString()
를 재정의할 수 있고, 재정의된 메서드를 호출하여 커스텀 객체를 문자열 값으로 변환할 수 있습니다. 또 다른방법으로는@@toPrimitive
메서드를 추가하여 타입 변환 과정을 넘어서는 조정을 할 수 있고, 이는 타입 변환 과정에서 항상valueOf
또는toString
보다 우선시됩니다.
재정의된 객체에서 기본Object.prototype.toString()
를 사용하기 위해서(혹은null
이나undefined
에서 호출하기 위해서),Function.prototype.call()
혹은Function.prototype.apply()
에 살펴볼 객체를 첫번째 매개변수(이를thisArg
라고 함)로 넣어 호출합니다.
const arr = [1, 2, 3];arr.toString(); // "1,2,3"Object.prototype.toString.call(arr); // "[object Array]"
Object.prototype.toString()
은"[object Type]"
을 반환하는데, 여기서Type
은 객체의 타입입니다. 만약 객체가 문자열 값인Symbol.toStringTag
특성을 가지고 있다면 그 값이Type
이 됩니다.Map
과Symbol
을 포함한 많은 내장 객체들이Symbol.toStringTag
를 가지고 있습니다. ES6 이전에 생성된 몇몇 객체들은Symbol.toStringTag
가 없지만 특별한 태그를 가지고 있습니다. 이는 아래와 같습니다(아래에 제공된 타입 이름과 동일한 태그를 가지고 있습니다).
arguments
객체는"[object Arguments]"
를 반환합니다.Symbol.toStringTag
가 재정의되지 않은 사용자 정의된 클래스들을 포함한 다른 객체들은"[object Object]"
를 반환할 것입니다.
Object.prototype.toString()
이null
과undefined
에서 호출되면 각각[object Null]
과[object Undefined]
를 반환합니다.
예제
기본toString
메소드 재정의
기본toString()
메서드 대신에 호출될 함수를 정의할 수 있습니다.toString()
메서드는 인자를 취하지 않고 문자열을 반환합니다. 직접 생성한toString()
메서드는 원하는 어떤 값이든 될 수 있지만 해당 객체에 대한 정보를 전달하고 있을 때 가장 유용할 것입니다.
다음 코드는Dog
객체 타입을 정의하고Dog
타입을 따르는theDog
를 생성합니다:
function Dog(name, breed, color, sex) { this.name = name; this.breed = breed; this.color = color; this.sex = sex;}theDog = new Dog("Gabby", "Lab", "chocolate", "female");
커스텀 객체의toString()
메서드를 호출하는 경우Object
로부터 상속받은 기본 값을 반환하게 됩니다:
theDog.toString(); // returns [object Object]
다음 코드는 기본toString()
메서드를 재정의하는dogToString()
을 생성하고 할당합니다. 이 함수는 객체의 name, breed, color, sex를 포함하는 문자열을 "property = value;
"의 형태로 만들어냅니다.
Dog.prototype.toString = function dogToString() { var ret = "Dog " + this.name + " is a " + this.sex + " " + this.color + " " + this.breed; return ret;};
앞선 코드를 사용하면 문자열 컨텍스트에서theDog
가 사용될 때마다 JavaScript는 자동으로dogToString()
함수를 호출하여 다음 문자열을 반환합니다:
"Dog Gabby is a female chocolate Lab";
toString()
으로 객체 클래스 검사
toString()
은 모든 객체에 사용되어 해당 객체의 클래스를 가져올 수 있습니다. Object.prototype.toString()을 모든 객체에 사용하기 위해서는Function.prototype.call()
나Function.prototype.apply()
를 사용해서 검사하고자 하는 객체를thisArg
로 불리는 첫번째 파라미터로 넘겨야 합니다.
var toString = Object.prototype.toString;toString.call(new Date()); // [object Date]toString.call(new String()); // [object String]toString.call(Math); // [object Math]// Since JavaScript 1.8.5toString.call(undefined); // [object Undefined]toString.call(null); // [object Null]
명세서
Specification |
---|
ECMAScript® 2026 Language Specification # sec-object.prototype.tostring |