使用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
相关产品推荐
相关产品推荐

