ES6 / Babel传播错误与Set

时间:2015-08-14 00:04:36

标签: javascript ecmascript-6

我有以下代码,简化了现实世界的例子。

let arr = [0,1,2],
    s = new Set(arr);

let arr2 = [...s];
alert('3 == ' + arr2.length);

问题是,这会失败,并在Google Chrome上产生一个空的arr2,它有一个原生的Set实现,但是一个polyfilled Array.from。有趣的是,它在IE11上运行正常,它有一个polyfilled Array.from AND Set。

Babel将展开集转换为此

var arr2 = [].concat(_toConsumableArray(s));

_toConsumableArray返回Array.from。我在_toConsumableArray内部设置了一个断点,我可以通过调用Array.from看到它产生一个空数组。

我的问题是,这是否是Array.from polyfill中的一个错误,因为它没有正确处理本机(不是polyfilled)Set,或者是Array.from(x)中Babel代码的问题不是...x的完美等价物(当x不是数组时)。

1 个答案:

答案 0 :(得分:6)

  

我可以通过调用Array.from看到它产生一个空数组。这是MDN' Array.from polyfill中的错误吗?

不是真正的错误,但实际上是properly documented

  

此外,由于真正的迭代不能被填充,因此该实现不支持ECMA-262第6版中定义的通用迭代。

我认为这是指ES5中缺少Symbol.iterator