我正在使用Google Chrome中的新ES6符号进行实验,并在启用"实验性JavaScript"在Chrome Flags中,我可以在我的代码中使用new Symbol()
。
但是,当我尝试运行以下代码时:
var sym = new Symbol();
var obj = {};
obj[sym] = 'Hello, symbols';
我收到以下错误:
TypeError: Conversion from symbol to string
我的代码出了什么问题?
谢谢!
答案 0 :(得分:2)
由于符号是值而不是对象,因此它们是通过对Symbol
的普通函数调用创建的,而不是通过在其上调用new
来创建的。在您使用的Chrome版本中,new Symbol
为您提供了此类值的包装对象(即,您可以通过在结果上调用.valueOf
来获取实际符号。)
由于这是一个常见的陷阱,ES6草案规范最近改为禁止构造函数调用Symbol
。也就是说,您已经在代码的第一行获得了异常。此更改已在V8中实施,但尚未进入Chrome。