Why Symbol('test').toString()
works well, but I can't use '' + Symbol('test')
?
It will throw Error:
cannot convert a Symbol value to a string
Why does the implicit type conversion not work? Why is the code not equal to '' + Symbol('test').toString()
?
According to ECMA-262, using the addition operator on a value of type Symbol in combination with a string value first calls the internal ToPrimitive, which returns the symbol. It then calls the internal ToString which, for Symbols, will throw a TypeError exception.
So calling the internal ToString is not the same as calling Symbol.prototype.toString.
So I guess the answer to:
Why does the implicit type conversion not work?
is "because the spec says so".
You can, however you're not meant to do so by accident.
console.log(''+String(Symbol('My symbol!')))
// Symbol(My other symbol!)
console.log(Symbol('My symbol!').description)
// My other symbol!
console.log(Symbol.keyFor(Symbol.for('My other symbol!')))
// My other symbol!
Note:
Symbol.keyFor
only works for symbols created via theSymbol.for
function.
Symbol.keyFor(Symbol('My symbol!'))
will evaluate toundefined
.You can also use
.description
to get the string value used to create the symbol.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With