Symbol.prototype.toString()

Symbol 값의 toString() 메서드는 지정된 심볼 값을 나타내는 문자열을 반환합니다.

시도해보기

구문

js
toString()

반환 값

지정된 심볼 값을 나타내는 문자열.

설명

Symbol 객체는 ObjecttoString 메서드를 재정의하며, Object.prototype.toString()을 상속하지 않습니다. Symbol 값의 경우 toString 메서드는 "Symbol(description)" 형식의 설명 문자열을 반환하며, 여기서 description은 심볼의 description입니다.

toString() 메서드는 this 값이 Symbol 원시 값 또는 래퍼 객체여야 합니다. 이 외의 this 값에 대해서는 심볼 값으로 강제 변환하지 않고 TypeError를 발생시킵니다.

Symbol에는 [Symbol.toPrimitive]() 메서드가 있기 때문에 Symbol 객체를 문자열로 강제 변환할 때 이 메서드가 항상 toString()보다 우선합니다. 그러나 Symbol.prototype[Symbol.toPrimitive]()는 심볼 원시 값을 반환하고 심볼 원시 값은 문자열로 암시적으로 변환될 때 TypeError가 발생하기 때문에 언어에서 toString() 메서드는 절대 암시적으로 호출되지 않습니다. 심볼을 문자열화하려면 해당 심볼의 toString() 메서드를 명시적으로 호출하거나 String() 함수를 사용해야 합니다.

예제

toString() 사용하기

js
Symbol("desc").toString(); // "Symbol(desc)"

// 잘 알려진 심볼
Symbol.iterator.toString(); // "Symbol(Symbol.iterator)"

// 글로벌 심볼
Symbol.for("foo").toString(); // "Symbol(foo)"

암시적 toString() 호출

JavaScript가 심볼 래퍼 객체에서 [Symbol.toPrimitive]() 대신 toString()을 암시적으로 호출하도록 하는 유일한 방법은 Symbol.toPrimitive 메서드를 먼저 삭제 처리하는 방법 뿐 입니다.

경고: 실제로 이 작업을 수행하지 마세요. 정확히 무엇을 하고 있는지 알지 못하면 기본 제공 객체를 변경하지 마세요.

js
delete Symbol.prototype[Symbol.toPrimitive];
console.log(`${Object(Symbol("foo"))}`); // "Symbol(foo)"

명세서

Specification
ECMAScript Language Specification
# sec-symbol.prototype.tostring

브라우저 호환성

BCD tables only load in the browser

같이 보기