【问题标题】:ES6 Symbols in ChromeChrome 中的 ES6 符号
【发布时间】:2014-04-23 11:16:55
【问题描述】:

我正在 Google Chrome 中试验新的 ES6 Symbols,在 Chrome Flags 中启用“Experimental JavaScript”后,我可以在我的代码中使用new Symbol()。

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

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

我收到以下错误:

TypeError: Conversion from symbol to string

我的代码有什么问题?

谢谢!

【问题讨论】:

  • 通过将 Symbol 作为函数 (Symbol()) 而不是构造函数 (new Symbol()) 调用来创建符号。

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


【解决方案1】:

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

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

【讨论】:

  • 谢谢,它有效!我很困惑,当我调用 Symbol() 而不调用 new 时,由于某种原因,chrome 控制台将此值打印为 null。
  • 是的,我认为还没有人完成教 Chrome devtools ES6 的工作。
猜你喜欢
  • 2016-02-24
  • 2012-11-14
  • 1970-01-01
  • 2019-06-03
  • 2016-10-19
  • 2017-11-28
  • 2016-11-28
  • 1970-01-01
  • 2015-09-30
相关资源
最近更新 更多