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

Jos*_*eam 7 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';
});
Run Code Online (Sandbox Code Playgroud)

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

但是,这可以按预期工作(使用lodash):

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

  updatedItem.prop = 'something cool';
});
Run Code Online (Sandbox Code Playgroud)

任何的想法?我尝试在互联网上探讨此事,但无济于事.

log*_*yth 8

Object.assign适用于Chrome,因为Chrome本机支持它.babel-loader它本身只将ES6语法转换为ES5语法,它没有做任何事情来使ES6库功能可用.使用Webpack最简单的方法是更改​​配置

entry: 'app.js'
Run Code Online (Sandbox Code Playgroud)

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

// Or with Babel 6:
entry: ['babel-polyfill', 'app.js']
Run Code Online (Sandbox Code Playgroud)

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