【问题标题】:Question about the syntax of using the spread operator to 'spreads' object(s) as an argument [duplicate]关于使用扩展运算符将“扩展”对象作为参数的语法的问题[重复]
【发布时间】:2020-11-20 20:54:49
【问题描述】:

使用来自MDN的这个例子:

let obj1 = { foo: 'bar', x: 42 };
let obj2 = { foo: 'baz', y: 13 };
const merge = ( ...objects ) => ( { ...objects } );

let mergedObj1 = merge (obj1, obj2);
console.log(mergedObj1); // { 0: { foo: 'bar', x: 42 }, 1: { foo: 'baz', y: 13 } }

我知道merge 是一个执行隐式返回的箭头函数(第一个表达式?)。我想知道为什么我们必须将...objects 包装在分组运算符/括号中。

【问题讨论】:

    标签: javascript


    【解决方案1】:

    让我们考虑函数定义:const merge = ( ...objects ) => ( { ...objects } );。这里的参数...objects 使用扩展运算符创建一个包含传递给此函数的所有参数的数组。这使得传递任意数量的参数成为可能,它将创建一个相应的数组。如果您查看生成的内容,它可能如下所示:

    [ { foo: 'bar', x: 42 }, { foo: 'baz', y: 13 } ]
    

    在函数体中,您现在正在扩展数组本身。将其包装在 {} 中会创建对象。但是,由于您使用的是隐式 return(没有 return 语句),因此对象的 {} 和通常包装函数主体的 {} 之间可能存在一些歧义。因此,() 包裹了整个语句。

    这个函数可以这样写:

    const merge = (...objects) => {
      return { ...objects };
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-13
      • 2021-01-17
      • 2020-04-13
      • 2019-05-16
      • 2021-04-09
      • 2017-12-07
      相关资源
      最近更新 更多