为什么CodePen和Chrome上的传播运营商会有不同的结果?

时间:2017-07-26 17:53:56

标签: javascript google-chrome ecmascript-6 codepen

我在CodePen和Chrome中测试了点差运算符,结果不一样。

var str = 'foo';
var char = [...str];
console.log(char);

在CodePen,我使用了Babel预处理器并获得了["foo"]

在Chrome开发者工具中,我获得了["f", "o", "o"]

为什么会这样?

2 个答案:

答案 0 :(得分:4)

正如评论中所提到的,这与babel js的翻译有关。 看起来codepen正在使用这个babel-preset es2015-loose,它的扩展运算符实现有一些分歧:

  

Babel的松散模式将ES6代码转换为更少的ES5代码   忠实于ES6语义。

来源:http://2ality.com/2015/12/babel6-loose-mode.html

这实际上是一个codepen问题,他们现在可能不应该使用loose模式。

答案 1 :(得分:0)

您可以看到Codepen和JS Bin编译的代码之间存在差异。

Codepen编译:

'use strict';

var str = 'foo';
var char = [].concat(str);
alert(char);

JS Bin编译:

try {
'use strict';

    function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } }

    var str = 'foo';
    var char = [].concat(_toConsumableArray(str));
    window.runnerWindow.proxyConsole.log(char);
} catch (error) { throw error; }