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".
your type not string
'' + Symbol('test').toString()
you can check, Symbol is a new type in ES6
The Symbol() function returns a value of type symbol, .....
You can, your just not meant to do it by accident.
console.log(''+String(Symbol('My symbol!'))) // Symbol(My other symbol!) console.log(Symbol.keyFor(Symbol.for('My other symbol!'))) // My other symbol!
Symbol.keyForonly works for symbols created via the
Symbol.keyFor(Symbol('My symbol!'))will evaluate to
©2020 All rights reserved.