【问题标题】:rest operator returned by fat-arrow function [duplicate]胖箭头函数返回的休息运算符[重复]
【发布时间】:2017-12-08 11:35:13
【问题描述】:

下面的代码可以写成一行吗(不带return关键字)?

elements.map(element => {
  return {...element, selected: false};
})

【问题讨论】:

  • FWIW: ... 不是运算符(它不可能;运算符只有一个结果值),在上面的上下文中,...spread 语法,而不是 rest 语法。
  • 你对休息与传播的看法是对的。但是您确定“操作员”吗?他们在 MDN(参见 URL 的最后一部分)developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 和 Microsoft Docs 中使用该名称:docs.microsoft.com/en-us/scripting/javascript/reference/…
  • 是的,非常确定。 :-) 你不会在the specthe proposal 中看到它被称为运算符。 (再次重申:它不能是运算符,它没有单个结果值,也不能在所有表达式上下文中使用)。请记住,MDN 是社区编辑的。这非常好,但每隔一段时间就会有人引入错误。不幸的是,该页面的原作者确实在标题中包含了“操作员”。这篇文章很久以前就修复了,但遗憾的是 URL 仍然存在。不能给你一个 MS 弄错的理由。 :-)

标签: javascript typescript arrow-functions ecmascript-next


【解决方案1】:

是的,通过使用简洁的箭头形式,将对象初始化器包含在()中:

elements.map(element => ({...element, selected: false}));
// ---------------------^-----------------------------^

您需要(),否则对象初始化程序的{ 将被读取为{ 作为函数体的开头。 ( 反而使它成为一个带有隐含 return 的表达式主体。

【讨论】:

  • 使用对象扩展运算符安全吗?
  • @sabithpocker:这不是运算符。这取决于您的目标环境以及您是否正在编译。 Property rest/spread 目前是Stage 3 proposal,但它在当前版本的 Chrome 和 Firefox 中发布(我没有 Edge 方便),所以可能接近第 4 阶段。几乎可以肯定它会出现在 ES2018 快照规范中。 (但问题不在于属性休息/传播,而是箭头函数。:-))
  • 好的,谢谢。有人在回答另一个问题时警告我不要使用它(在 Typescript 中)。只是想知道它是否是一个有效的警告。
猜你喜欢
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 2019-01-02
  • 2022-04-25
  • 1970-01-01
  • 2017-04-26
  • 1970-01-01
相关资源
最近更新 更多