五个能让 JS 代码短一点的写法

举报
茉莉风铃 发表于 2026/10/02 10:23:03 2026/10/02
【摘要】 介绍五个能精简 JS 代码的写法——可选链取深层值、at() 取倒数元素、Object.groupBy 做分组、用 ?? 而非 || 给默认值避免误判 0 与空字符串、解构时直接重命名字段。

不是为了炫技,是这些写法确实能让代码少几行、读起来也更清楚。都是现在浏览器和 Node 普遍支持的。

1. 用可选链替掉层层判断

从深层对象里取值,以前要一层层判空:

const city = user && user.address && user.address.city;

现在:

const city = user?.address?.city;

碰到不存在的中间层返回 undefined,不会抛错。配合函数调用也行:onChange?.() 只在有这个回调时才调。

2. 取最后一个元素用 at()

以前取数组末尾得算长度:

const last = arr[arr.length - 1];

现在直接:

const last = arr.at(-1);

负数表示从后往前数,at(-2) 是倒数第二个。字符串也支持。

3. 分组用 Object.groupBy

按某个字段把数组分组,以前得自己写 reduce:

const byType = Object.groupBy(items, (it) => it.type);

一行搞定,返回的是以分组值为键的对象。需要 Map 作为结果时用 Map.groupBy,两者用法一样。这个 API 比较新,老一点的运行时可能还没有,用之前确认一下环境。

4. 区分 ?? 和 ||

给默认值用 || 有个坑:0 和空字符串也会被当成"没有值"。

const size = input.size || 10;   // size 为 0 时结果是 10
const size2 = input.size ?? 10;  // size 为 0 时结果是 0

?? 只在值为 null 或 undefined 时才用默认值。做数值配置、页码这类默认值时该用 ??。

5. 解构时顺手改名

接口返回的字段名跟自己代码里的习惯不一致,不用再赋值一次:

const { user_name: userName, id: userId } = data;

解构的同时就改了名,还能给默认值:const { page = 1 } = query。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。