3

我正在 Google Chrome 中试验新的 ES6 符号,在 Chrome 标志中启用“实验性 JavaScript”后,我可以new Symbol()在我的代码中使用。

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

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

我收到以下错误:

TypeError: Conversion from symbol to string

我的代码有什么问题?

谢谢!

4

1 回答 1

2

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

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

于 2014-03-18T06:51:42.547 回答