我在CodePen和Chrome中测试了点差运算符,结果不一样。
var str = 'foo';
var char = [...str];
console.log(char);
在CodePen,我使用了Babel预处理器并获得了["foo"]
。
在Chrome开发者工具中,我获得了["f", "o", "o"]
。
为什么会这样?
答案 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; }