JavaScript中Object[key] ??= 0语法的含义是什么?
关于
??=空值合并赋值运算符的解释 你遇到的allNames[name] ??= 0;是JavaScript里的空值合并赋值运算符,作用明确:
- 当
allNames[name]的值为null或者undefined时,会把0赋值给它; - 如果
allNames[name]已经是有效的非空值(比如数字、字符串等),则保持原数值不变,不执行赋值操作。
结合你提供的统计名字出现次数的代码来看:
const names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice']; const countedNames = names.reduce((allNames, name) => { allNames[name] ??= 0; allNames[name]++; return allNames; }, {});
第一次遍历到某个名字(比如Alice)时,allNames是初始的空对象,allNames['Alice']不存在,也就是undefined,这时候??=会把它设为0,紧接着allNames['Alice']++就把值变成1;当第二次再遇到Alice时,allNames['Alice']已经是1(非null/undefined),??=就不会做任何操作,直接执行++把值累加到2,以此实现统计次数的效果。
这个运算符等价于更冗长的写法:
if (allNames[name] === null || allNames[name] === undefined) { allNames[name] = 0; }
或者简化的赋值写法:
allNames[name] = allNames[name] ?? 0;
内容的提问来源于stack exchange,提问作者IZ Dev
相关产品推荐
相关产品推荐

