【问题标题】:Object spread operator throw error in microsoft edge对象扩展运算符在 Microsoft Edge 中抛出错误
【发布时间】:2020-06-24 08:21:04
【问题描述】:

我有代码:

let a = {a: 'a', b: 'b'};
let b = {c: 'c', d: 'd'};
let c = {...a, ...b};

chrome/firefox/... 中显示:c = {a: 'a', b: 'b', c: 'c', d: 'd'},但在 microsoft edge 中会抛出错误 Expected identifier, string or number

我尝试使用cdn.polyfill.iohttps://babeljs.io/docs/en/babel-polyfill,但没有成功。

如何在 microsoft edge 中运行我的 webpack 代码?

【问题讨论】:

  • 你在使用 babel 吗?如果是,您可以发布您的 babel 配置吗?
  • Kornflexx,我不使用 babel 来编译我的代码,但我发现一些帖子可以包含 babel polifyls 作为脚本,因此我尝试使用它。

标签: javascript object microsoft-edge spread-syntax


【解决方案1】:

它应该在 Edge 79 中可用,不需要任何转编译器(如 Babel)(但不是 IE,不要混淆它们)。

https://caniuse.com/#feat=mdn-javascript_operators_spread_spread_in_object_literals

也就是说,在大多数情况下,如果需要,您可以使用 Object.assign() 代替 -

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

您的代码将是:

let a = {a: 'a', b: 'b'};
let b = {c: 'c', d: 'd'};
let c = Object.assign(a,b)

console.log(c)

自 Edge 12 起支持Object.assign()

https://caniuse.com/#feat=mdn-javascript_builtins_object_assign

【讨论】:

【解决方案2】:

{ ...obj } 语法称为“Object Rest/Spread Properties”,它是 ECMAScript 2018 的一部分,Edge Legacy 不支持。您可以使用Babel 对其进行转译。

如果你只是想在非 Node.js 环境中使用它,你可以使用 babel-standalone。你只需要在你的脚本中加载 babel-standalone 并在 “text/babel”“text 类型的 script 标签中编写你想要转译的脚本/jsx”,Edge Legacy 中的结果将是{"a":"a","b":"b","c":"c","d":"d"}

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/6.18.1/babel.min.js"></script>
</head>
<body>
    <script type="text/babel">
        let a = { a: 'a', b: 'b' };
        let b = { c: 'c', d: 'd' };
        let c = { ...a, ...b };
        console.log(JSON.stringify(c));
    </script>
</body>
</html>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-28
    • 2017-02-23
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-16
    • 1970-01-01
    相关资源
    最近更新 更多