如何在JavaScript数组解构时为变量指定空对象作为默认值?
实现数组对象赋值给变量,不存在则赋值空对象{}
没问题,这个需求用ES6的解构赋值或者空值合并运算符就能轻松搞定,我给你拆解几种常用的实现方式:
一、基础场景:提取单个位置的对象
如果只是要提取数组中某一个位置的对象,不存在就赋值{},有两种简洁的方式:
方式1:解构赋值(直观简洁)
利用解构赋值的默认值特性,当数组对应位置没有元素(即值为undefined)时,自动使用默认的空对象:// 提取数组第0个元素,不存在则为{} const [targetObj = {}] = yourArray;方式2:空值合并运算符(精准控制)
如果需要更精准的判断(只在元素为null或undefined时替换),可以用??运算符,它不会把''、false这类有效 falsy 值替换成空对象:// 提取数组第2个元素,仅当该位置是null/undefined时赋值{} const targetObj = yourArray[2] ?? {};
二、提取多个独立变量
如果要一次性提取数组中多个位置的对象,每个位置不存在都赋值{},直接在解构时给每个变量加默认值即可:
let a = [ { username: 'james.bond', name: 'James Bond' }, { username: 'sherlock.holmes', name: 'Sherlock Holmes' }, ]; // 提取第0、1、2个元素,第2个位置不存在则为{} const [user1 = {}, user2 = {}, user3 = {}] = a; console.log(user3); // 输出 {}
三、注意区分「单个变量」和「剩余参数」
你示例里的const [b = {}, c = [] ] = a;需要注意:这里的c是数组的第1个元素(不是剩余元素集合),如果你的需求是让c也对应单个对象,记得把默认值改成{}:
// 正确提取前两个对象,不存在则为{} const [b = {}, c = {}] = a;
如果是想把数组中除第一个元素外的其他元素打包成数组,才需要用剩余参数语法(加...):
// b是第一个对象,rest是剩余所有元素组成的数组 const [b = {}, ...rest] = a;
四、完整示例
let a = [ { username: 'james.bond', name: 'James Bond', email: 'james.bond.xx@xxx.xxx' }, { username: 'sherlock.holmes', name: 'Sherlock Holmes', email: 'sherlock.holmes.xx@xxx.xxx' }, { name: 'Shinichi Kudo', email: 'shinichi.kudo.xx@xxx.xxx', badgeText: '21' }, ]; // 提取前3个对象,第4个不存在则为{} const [bond = {}, holmes = {}, kudo = {}, doyle = {}] = a; console.log(doyle); // 输出 {} // 处理数组中存在null的情况 const riskyArray = [null, { name: 'Test' }]; const [safeObj = {}] = riskyArray; console.log(safeObj); // 输出 null(因为null不是undefined,默认值不生效) // 用??强制替换null为{} const trulySafeObj = riskyArray[0] ?? {}; console.log(trulySafeObj); // 输出 {}
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

