首页 > 解决方案 > 有人可以向我解释为什么这种语法使用括号而不是大括号,在 reduce 方法中添加逗号并且不再“返回”吗?

问题描述

我有一个快速的问题,我认为这与换行符或其他东西有关,但我找不到答案或发布。这是一个使用reduce()方法的例子。

这是我通常做或看到的:

const unique = ['a','b','c','a''a','a','b'];

unique.reduce((acc, val)=> {acc[val]=(acc[val]||0)+1; return acc;}, {}); //{ a: 4, b: 2, c: 1 }

但是,我们也可以使用这种语法:删除大括号 & return,改用括号并添加,before acc。有人可以向我解释这种语法吗?

unique.reduce((acc, val)=> (acc[val]=(acc[val]||0)+1, acc), {}); // { a: 4, b: 2, c: 1 }


标签: javascriptarraysline-breaksarrow-functions

解决方案


这是因为您的示例中使用了逗号运算符。来自MDN:

逗号运算符( ) 计算其,每个操作数(从左到右)并返回最后一个操作数的值。

In (acc[val]=(acc[val]||0)+1, acc)comma 正是这样做的,它先做 left part 然后返回acc

更新:用大括号替换括号将不起作用,因为它不符合 JS 箭头函数语法。来自MDN 上的箭头函数文章:

如果正文需要额外的处理线,您需要重新引入括号加上“返回”

soreturn是大括号所必需的,而括号是一个简洁的箭头函数,不需要return.


推荐阅读