Symbol.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 September 2015.
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