为什么Object.assign似乎不适用于Safari 8.0.7?

时间:2015-10-02 22:11:49

标签: safari ecmascript-6

我们正在使用webpack和babel-core 5.8.25编写应用程序。

在某个时间点,会发生这种情况:

someArray.map(item => {
  const updatedItem = Object.assign({}, item); // silently fails here... doesn't even continue the code

  updatedItem.prop = 'something cool';
});

这显然是在点击浏览器之前编译的。它适用于最新版本的Chrome和最新版本的iOS Safari,但在Safari 8.0.7中,它无声地失败(没有错误抛出......只是没有超过该行)。

然而,这可以按预期工作(使用lodash):

someArray.map(item => {
  const updatedItem = _.extend({}, item); // the important part

  updatedItem.prop = 'something cool';
});

有什么想法吗?我尝试在网上闲聊这个,但无济于事。

1 个答案:

答案 0 :(得分:8)

Object.assign适用于Chrome,因为Chrome本机支持它。 babel-loader本身只将ES6语法转换为ES5语法,它无法使ES6库功能可用。使用Webpack最简单的方法是从

中更改配置
entry: 'app.js'

entry: ['babel-core/polyfill', 'app.js']

// Or with Babel 6:
entry: ['babel-polyfill', 'app.js']

这样Webpack也会在执行您的应用程序之前捆绑并运行polyfill。 Babel提供/polyfill作为加载垃圾填埋场的简单方法,但它是可选的,因为不是每个人都想使用它,并且因为有许多可用的填充物和Babel使用的填充物,core-js只是其中之一许多。