You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript表达式中括号的作用是什么?结合reduce代码求解

原代码片段如下:

const pick = (obj, arr) =>
  arr.reduce((acc, curr) => (curr in obj && (acc[curr] = obj[curr]), acc), {});

以下是各个括号的具体作用说明:

1. 箭头函数后 () => (...) 外层括号的作用

这里的圆括号是分组运算符,作用是将括号内的所有逻辑合并为一个完整的表达式,作为箭头函数的返回值。
当箭头函数省略{}函数体时,默认会返回=>后方的第一个表达式结果,加这个括号可以明确告知JS引擎,括号内的全部运算属于同一个返回值表达式,避免语法解析错误。

2. 赋值语句外层 (acc[curr] = obj[curr]) 括号的作用

这里的括号是为了修正运算符优先级:
JS中&&的优先级远高于赋值运算符=,如果不加这层括号,curr in obj && acc[curr] = obj[curr] 会被JS引擎错误解析为:

// 错误逻辑,等号左侧是运算结果,不是可赋值的左值,会抛出语法错误
(curr in obj && acc[curr]) = obj[curr]

加括号后明确告诉JS引擎,整个赋值语句是&&的右操作数,保证赋值逻辑正确执行。

3. (curr in obj && ..., acc) 整体括号包裹的逗号表达式作用

这里的括号包裹的是逗号运算符表达式,逗号运算符的规则是:从左到右依次执行所有子表达式,最终返回最后一个子表达式的结果。

  • 首先执行curr in obj && (acc[curr] = obj[curr])逻辑:只有属性存在时才给累加器赋值
  • 不管前面的赋值逻辑是否执行,最终都会返回acc累加器对象,正好符合Array.reduce的回调函数要求:每次迭代必须返回累加器,供下一次迭代使用。

另外补充说明curr in obj && ...的逻辑:这是JS的短路与运算,等价于简写的if判断,只有curr in obj返回true时,才会执行&&后方的赋值代码,符合只提取对象存在属性的需求。


内容的提问来源于stack exchange,提问作者eakl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 17:39:02