五个能让 JS 代码短一点的写法
【摘要】 介绍五个能精简 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)