Why Symbols not convert string implicitly

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".


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!    

Note: Symbol.keyFor only works for symbols created via the Symbol.for function.

Symbol.keyFor(Symbol('My symbol!')) will evaluate to undefined.


Recent Questions

Top Questions

Home Tags Terms of Service Privacy Policy DMCA Contact Us

©2020 All rights reserved.