This page was translated from English by the community.Learn more and join the MDN Web Docs community.
Object.prototype.toString()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015년 7월.
Object 객체의 메서드인toString() 은 해당 object를 표현하는 문자열을 반환합니다. 이 메서드는 사용자가타입 강제 변환을 통해 파생된 객체에서 재정의할 수 있습니다.
In this article
시도해 보기
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> |