【问题标题】:Why does Object.assign not appear to work on Safari 8.0.7?为什么 Object.assign 似乎不适用于 Safari 8.0.7?
【发布时间】:2015-10-02 22:11:49
【问题描述】:

我们正在使用 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';
});

有什么想法吗?我尝试在互联网上搜索这件事,但无济于事。

【问题讨论】:

  • 你在加载 Babel 的 polyfill 吗? require('babel-core/polyfill');
  • @loganfsmyth,没有明确说明。我将 babel-loader 与 webpack 结合使用(我相信 babel-loader 只是利用了 babel-core)。这可以解释浏览器之间的功能差异吗?在 iOS 9 的移动版 Safari 和 OSX 桌面版 Chrome 中,编译后的 Object.assign 工作正常。

标签: safari ecmascript-6


【解决方案1】:

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 作为一种简单的加载 polfill 的方法,但它是可选的,因为不是每个人都想使用它,而且因为有许多 polyfill 可用并且 Babel 使用的那个,core-js 只是其中之一。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-03
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-27
    • 1970-01-01
    • 2023-02-10
    相关资源
    最近更新 更多