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

使用Optional Chaining与逻辑赋值时出现语法错误,求问题原因

可选链结合自增运算符报错的原因解析

你的代码触发Uncaught SyntaxError: Invalid left-hand side expression in postfix operation错误,核心问题有两点:

1. 可选链表达式无法作为自增运算符的左操作数

scores?.[player]++中的scores?.[player]是可选链表达式,它返回的是属性的具体值(或undefined),而非指向该属性的可赋值引用。自增(++)、自减这类运算符要求左操作数是一个能被赋值的“左值”(比如直接的对象属性引用、变量),可选链的输出不满足这个语法要求,因此直接抛出语法错误。

2. 逻辑与(&&)的逻辑完全不符合需求

就算语法没问题,你的代码逻辑也达不到预期:

  • 当属性存在时,scores?.[player]++会返回自增前的数值(比如原本是1,返回1,属于真值),&&后面的scores[player] = 1不会执行——虽然自增本身生效了,但逻辑冗余且容易误导。
  • 当属性不存在时,scores?.[player]是undefined,undefined++得到NaN(假值),&&后面的赋值同样不会执行,根本实现不了“不存在则创建属性并设为1”的功能。

更简洁的正确写法

除了你已经能用的三元运算符,还可以用逻辑赋值运算符简化:

const scores = {};
for (const player of Object.values(game.scored)) {
  scores[player] ??= 0; // 若属性不存在,先初始化为0
  scores[player]++;     // 统一执行加1操作
}

// 或者合并为一行:
// scores[player] = (scores[player] ?? 0) + 1;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 21:26:06