ES6/Babel传播错误与Set

Ada*_*kis 4 javascript ecmascript-6

我有以下代码,从现实世界的例子中简化.

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

let arr2 = [...s];
alert('3 == ' + arr2.length);
Run Code Online (Sandbox Code Playgroud)

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

Babel将展开集转换为此

var arr2 = [].concat(_toConsumableArray(s));
Run Code Online (Sandbox Code Playgroud)

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

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

Ber*_*rgi 6

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

不是真正的错误,但实际上是正确记录的:

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

我认为这是指缺乏Symbol.iteratorES5.