Chrome中的ES6符号

时间:2014-03-18 00:24:05

标签: google-chrome ecmascript-harmony ecmascript-6

我正在使用Google Chrome中的新ES6符号进行实验,并在启用"实验性JavaScript"在Chrome Flags中,我可以在我的代码中使用new Symbol()

但是,当我尝试运行以下代码时:

var sym = new Symbol();
var obj = {};
obj[sym] = 'Hello, symbols';

我收到以下错误:

TypeError: Conversion from symbol to string

我的代码出了什么问题?

谢谢!

1 个答案:

答案 0 :(得分:2)

由于符号是值而不是对象,因此它们是通过对Symbol的普通函数调用创建的,而不是通过在其上调用new来创建的。在您使用的Chrome版本中,new Symbol为您提供了此类值的包装对象(即,您可以通过在结果上调用.valueOf来获取实际符号。)

由于这是一个常见的陷阱,ES6草案规范最近改为禁止构造函数调用Symbol。也就是说,您已经在代码的第一行获得了异常。此更改已在V8中实施,但尚未进入Chrome。