详解【数组解构】与【对象解构】

本文介绍了JavaScript中的解构赋值,包括数组解构的交换值、多维度解构、对象解构的默认值和变量重命名,以及如何处理多级嵌套结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、解构是什么?

所谓解构,就是按照一定模式,从数组和对象中提取值,对变量进行赋值。 解构不仅可以使代码更简洁,还可以使你更清楚地看到你正在使用哪些属性或值。

值得注意的是,解构创建的是新的变量引用,与原始数组或对象中的值相连接,但不与原始数组或对象本身连接(除非这些值是对象或数组)。

二、数组解构

数组解构赋值有一个非常独特的用例,能轻易地互换两个变量的值。

    let  a = 1
    let  b = 3;
    [b,a] = [a,b]
    console.log(a,b) // 3  1

数组解构允许我们从数组中提取值并将它们赋给变量。

   const  arr= [1,23,43,4,5,4,768]
    // 数组解构
    const [a,b,c] = arr
    console.log(a); // 1
    console.log(b); // 23
    console.log(c); // 43
    
	function getValue(){
       return[100,60]
    }
 	const  [max,min] = getValue()
 	console.log(max);  // 100
 	console.log(min);  // 60

如果你只想提取里面某一个变量,那么你就可以省略之前的变量名。例如只想要第三个变量;

	const  arr= [1,23,43,4,5,4,768]
   // 数组解构
    const [ , ,c] = arr
    console.log(c); // 43   

使用过程中会遇到一些特殊情况,变量多,单元值少或者变量少,单元值多。

  • 变量多,单元值少 这种情况下控制台就会返回一个undefined值。
   const [a,b,c,d,e] = ['小米','苹果','华为','格力']
    console.log(a);
    console.log(c);
    console.log(b);
    console.log(d);
    console.log(e); //undefined
  • 变量少,单元值多 此时就可以用 … 语法来将剩余的项目赋值给一个指定的变量。
const [x,y,...c] = ['小米','苹果','华为','格力']
console.log(x);
console.log(y);
console.log(c);  // ['华为', '格力']

多维数组解构

  • 在整个解构模式中插入另一个数组模式,解构操作就会下行到嵌套的数组中
 	   const  arr  = [1,23,43,[14,23,14,4,2]]
       const [w,e,,[a,d,f,g,m]] = arr
       console.log(w); // 1
       console.log(a); // 14

除了基本的数组解构外,我们还可以使用默认值来处理缺失的元素。

// 定义一个数组
const numbers = [1, 2, 3];
// 使用数组解构将数组中的值赋给变量,并设置默认值
const [a, b, c, d = 4] = numbers;
console.log(a); // 输出: 1
console.log(b); // 输出: 2
console.log(c); // 输出: 3
console.log(d); // 输出: 4
  • 我们定义了一个名为numbers的数组,其中只有三个元素。然而,在解构赋值时,我们为变量d设置了默认值为4。当数组中没有第四个元素时,变量d将取默认值。

三、对象解构

let/const{属性名}=被解构的对象

   const  obj={
        uname:"小明",
        age:18,
        address:{
          add:"identity",
          phone:12372
        }
      }
      const {uname,age} = obj 
      console.log(uname); // 小明
      console.log(age);  // 18

默认值

  • 当你使用解构赋值语句时,如果所指定的本地变量在对象中没有找到同名属性,那么该变量会被赋值为 undefined
   const pig = {name:'佩奇',age: 6}
      // 1.
      const {name,age, address} = pig
      console.log(name);
      console.log(age);
      console.log(address); //undefined
  • 你可以选择性地定义一个默认值,以便在指定属性不存在时使用该值。若要这么做,需要在属性名后面添加一个等号并指定默认值
 const pig = {name:'佩奇',age: 6}
      // 1.
      const {name,age, address = "天津"} = pig
      console.log(name);
      console.log(age);
      console.log(address); // 天津

在此例中,变量 address 被指定了一个默认值 “天津” ,只有在 pig 的对应属性缺失、或对应的属性值为 undefined 的情况下,该默认值才会被使用。

重新指定变量名

  const pig = {name:'佩奇',age: 6}
  // 1.
  const {name:uname,age} = pig
  console.log(uname); // 佩奇
  • 也可以给变量别名添加默认值,依然是在本地变量名称后添加等号与默认值
  const pig = {name:'佩奇',age: 6}
  // 1.
  const {name:uname,age,address = "地球村"} = pig
  console.log(uname,age,address); // 佩奇 6 地球村

四、多级解构

对象与数组解构能被用在一起,以创建更复杂的解构表达式。在对象与数组混合而成的结构中,这么做便能准确提取其中你想要的信息片段。

  • 数组中有数组
const numbers = [1, 2, 3, 4, [5, 6, 7]];
// 解构出numbers的第一项n1和第五项中的第二项n2
const [n1, , , , [, n2]] = numbers;
console.log(n1, n2); // 1 6
  • 数组中有对象
const numbers = [1,2,3,4, 5, {name: "abc" }];
// 解构出numbers中的第一项n1和第六项中的name
const [n1, , , , , { name }] = numbers;
console.log(n1, name); // 1 abc

  • 对象中有数组和对象的解构类似写法
   const pig= {
        name:'佩奇',
        family:{
          mother:'猪妈',
          father:'猪爸',
          brother:'乔治'
        },
        age:10
      }
      const {name,family:{mother,father,brother},age}= pig
      console.log(name);  // 佩奇
      console.log(brother); // 乔治
      console.log(mother); // 猪妈
      console.log(age);  // 10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值