JavaScript中能否对Array.find的返回结果使用可选链完成赋值?
解答
报错原因
你写的写法不被JavaScript语法支持,可选链?.的返回值不能作为赋值操作的左值:当可选链左侧取值结果为undefined或null时,表达式会短路返回undefined,无法对undefined执行赋值操作,因此直接抛出错误。
符合要求的单行方案
用空值合并运算符??兜底临时空对象的写法就能满足你「无额外变量、无需提前判断」的需求:
let myArray = [{name: "foo", value: 30}, {name: "abc", value: 40}]; (myArray.find(entry => entry.name === 'foo') ?? {}).value = 50;
逻辑说明
- 匹配到对应条目时,
find返回原对象引用,赋值操作会直接修改原数组内对应对象的value值 - 未匹配到条目时,兜底的临时空对象会承接赋值操作,不会抛出错误,也不会对原数组产生任何影响,符合预期。
该写法全程仅执行一次查找逻辑,比调用两次find的逻辑与写法性能更优。
内容的提问来源于stack exchange,提问作者Francesca Kukral
相关产品推荐
相关产品推荐

