JavaScript -- 数组及对象解构赋值方法总结
创始人
2024-03-23 05:09:53

文章目录

  • 1 数组解构赋值
    • 1.1 保留默认值
    • 1.2 接受剩余的所有参数
    • 1.3 对函数执行结果解构
    • 1.4 交换两个变量的值
    • 1.5 二维数组结构
  • 2 对象的解构
    • 2.1 声明对象同时解构对象
    • 2.2 先声明再解构
    • 2.3 解构不存在的属性
    • 2.4 设置解构别名
    • 2.5 设置解构默认值

1 数组解构赋值

案例:将arr分别赋值给a,b,c

基本方法:

const arr = ["孙悟空", "猪八戒", "沙和尚"]let a,b,ca = arr[0]
b = arr[1]
c = arr[2]
console.log(a,b,c)

image-20221203113617271

使用对象解构:

推荐在结构赋值前面手动加分号,防止编译器解析出问题

const arr = ["孙悟空", "猪八戒", "沙和尚"]let a,b,c;[a, b, c] = arr // 解构赋值
console.log(a,b,c)

image-20221203113626216

但是一般使用的时候是声明和赋值在一起的(声明同时结构),但是如果前面参数比后面数组多,会被赋值undefined

let [d, e, f, g] = ["唐僧", "白骨精", "蜘蛛精", "玉兔精"]
console.log(d, e, f, g);[d, e, f, g] = ["唐僧", "白骨精", "蜘蛛精"]
console.log(d, e, f, g)

image-20221203114301972

在赋值的时候给定默认值,就可以防止其出现undefined,如果设置了默认值,同时在数组解构的时候可以覆盖掉这个值,那么最终这个值存的是数组中的对应元素

有值就赋值,没有值就用默认值

;[d, e, f=73, g=10] = ["唐僧", "白骨精", "蜘蛛精"]
console.log(d, e, f, g)

image-20221203124609267

1.1 保留默认值

在上面的例子中,g开始有值,但是在结构后又变成undefined了,我们想要的效果是如果可以赋值就赋值,不能赋值就用原来的,这样就可以通过下面这样设置来达到效果

let [d, e, f, g] = ["唐僧", "白骨精", "蜘蛛精", "玉兔精"]
console.log(d, e, f, g);[d, e, f, g=g] = ["唐僧", "白骨精", "蜘蛛精"]
console.log(d, e, f, g)

image-20221203124850570

1.2 接受剩余的所有参数

解构数组时,可以使用…来设置获取多余的元素

let [n1, n2, ...n3] = [4, 5, 6, 7]
console.log(n1, n2, n3)

image-20221203125411069

1.3 对函数执行结果解构

function fn() {return ["二郎神", "猪八戒"]
}let [name1, name2] = fn() // "二郎神", "猪八戒"

1.4 交换两个变量的值

let a1 = 10
let a2 = 20// 原来的做法
let temp = a1
a1 = a2
a2 = temp// 解构赋值
;[a1, a2] = [a2, a1] // [20, 10]

交换数组中两个元素的位置

const arr2 = ["孙悟空", "猪八戒"];[arr2[0], arr2[1]] = [arr2[1], arr2[0]]

1.5 二维数组结构

const arr3 = [["孙悟空", 18, "男"], ["猪八戒", 28, "男"]]let [[name, age, gender], obj] = arr3console.log(name, age, gender)
console.log(obj)

image-20221203130959090

2 对象的解构

2.1 声明对象同时解构对象

const obj = { name: "孙悟空", age: 18, gender: "男" }let { name, age, gender } = obj // 声明变量同时解构对象
console.log( name, age, gender)

image-20221203131639077

2.2 先声明再解构

这个必须得在解构的时候用括号括起来,不然会将大括号解析为代码块,然后会报错

const obj = {name: "孙悟空", age: 18, gender: "男"}let name, age, gender
;({name, age, gender} = obj)
console.log( name, age, gender)

image-20221203131822783

2.3 解构不存在的属性

const obj = { name: "孙悟空", age: 18, gender: "男" }let { address } = obj
console.log(address)

image-20221203131916303

2.4 设置解构别名

const obj = { name: "孙悟空", age: 18, gender: "男" }// 设置别名
let {name: a, age: b, gender: c} = obj
console.log(a, b, c)

image-20221203132044989

2.5 设置解构默认值

const obj = { name: "孙悟空", age: 18, gender: "男" }// 设置默认值
let {name: a, age: b, gender: c, address: d = "花果山"} = obj
console.log(a, b, c, d)

image-20221203132053301

相关内容

热门资讯

恒指牛熊街货比(59:41)︱... 截至1月7日,恒指最新的牛熊街货比例为59:41。中信证券牛熊证街货分布图中的数据显示,熊证街货重货...
北欧五国外长就格陵兰岛问题发表... 当地时间1月6日,丹麦、芬兰、冰岛、挪威和瑞典外长发表联合声明。声明称,作为北欧、北极国家及北约盟国...
英国10年期国债收益率跌2.2... 每经AI快讯,周二(1月6日)欧市尾盘,英国10年期国债收益率跌2.2个基点,报4.484%;两年期...
沈祥福、高洪波、胡建平、杨晨、... 转自:北京日报客户端1月6日,北京市足球运动协会第八届第三次会员大会在京举行,会上总结了北京足球过去...
“可办”变“智办” 城市更聪明 转自:贵州日报 贵州日报天眼新闻记者 谌思宇冬日的贵阳北站,车辆进出有序,旅客往来频繁。“人多车少的...