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

是否存在变量赋值/累加及嵌套属性递增的简写或内置函数?

嘿,这两个场景我平时写代码也经常碰到,确实有不少简洁的写法可以替代冗长的判断,我来给你详细说说:

场景1:变量已定义则累加,未定义则直接赋值

这个需求核心是给变量一个兜底的初始值,再执行累加,这里以JavaScript为例(也是这类需求最常见的场景):

  • 最安全的写法(ES2020+ 空值合并运算符):
    只会在变量是null或undefined时用兜底值,不会误把0、''、false这些合法的 falsy 值当成“未定义”:

    // 比如要累加5,未定义时直接设为5
    count = (count ?? 0) + 5;
    
  • 更简洁但要注意边界的写法(逻辑或运算符):
    如果你的变量不可能是0、''这类 falsy 值,用逻辑或更短,但要警惕误判:

    count = (count || 0) + 5;
    
  • 可读性拉满的分步写法:
    先给未定义的变量设初始值,再累加,一目了然:

    count ??= 0; // 仅当count为null/undefined时赋值0
    count += 5;
    
场景2:检查嵌套对象属性是否存在,存在则递增

嵌套对象的存在性判断是出了名的冗长,现在原生JS已经有非常简洁的方案了:

方案1:原生可选链+空值合并赋值(推荐,ES2020+)

先逐层确保嵌套对象存在,不存在就初始化,然后直接递增:

// 确保每一层对象都存在,不存在则创建空对象或初始计数对象
obj ??= {};
obj.level1 ??= {};
obj.level1.level2 ??= { count: 0 };

// 直接递增即可,不用再判断
obj.level1.level2.count++;

方案2:更紧凑的单行写法

如果追求代码紧凑,也可以把初始化和递增合并成一行(可读性稍降,但逻辑清晰):

// 若level2不存在则初始化{count:0},然后递增count
(obj?.level1?.level2 ??= { count: 0 }).count++;

方案3:工具库简化(可选)

如果项目里已经引入了Lodash这类工具库,可以用它的get和set方法一行搞定:

// 先获取现有值(默认0)加1,再赋值回原路径
_.set(obj, 'level1.level2.count', _.get(obj, 'level1.level2.count', 0) + 1);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:50:12