Symbol.prototype.toString()
Symbol
값의 toString()
메서드는 지정된 심볼 값을 나타내는 문자열을 반환합니다.
시도해보기
구문
toString()
반환 값
지정된 심볼 값을 나타내는 문자열.
설명
Symbol
객체는 Object
의 toString
메서드를 재정의하며,
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() 사용하기
Symbol("desc").toString(); // "Symbol(desc)"
// 잘 알려진 심볼
Symbol.iterator.toString(); // "Symbol(Symbol.iterator)"
// 글로벌 심볼
Symbol.for("foo").toString(); // "Symbol(foo)"
암시적 toString() 호출
JavaScript가 심볼 래퍼 객체에서 [Symbol.toPrimitive]()
대신 toString()
을 암시적으로 호출하도록 하는 유일한 방법은 Symbol.toPrimitive
메서드를 먼저 삭제 처리하는 방법 뿐 입니다.
경고: 실제로 이 작업을 수행하지 마세요. 정확히 무엇을 하고 있는지 알지 못하면 기본 제공 객체를 변경하지 마세요.
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