JS基础之解构赋值

简介: 解构赋值在js中,我们经常会将对象或者数组里面的一部分数据作为参数传递给函数,如果我们使用传统的.方法会很麻烦。

解构赋值

在js中,我们经常会将对象或者数组里面的一部分数据作为参数传递给函数,如果我们使用传统的.方法会很麻烦。

解构赋值就很好的解决了这样一种问题。

解构赋值是一种特殊的语法,可以将对象或者数组中的数据解构出来,然后赋值给变量。

数组解构

let arr = [1,2,3,4,5];
    let [a,b,c,d,e] = arr;
    console.log(a,b,c,d,e); // 1 2 3 4 5
复制代码

通过上面的例子,我们可以看到通过解构赋值,我们将数组的数据分别赋值给了变量a,b,c,d,e。

注意:

解构并不会破坏原来的数组,他只是将数组每个位置的数据赋值了某个变量,数组没有发生改变。

当然,有人会有这样一个问题,要是中间有一个数据我不需要,那该怎么办呢?

let arr = [1,2,3,4,5];
    let [a,,c,d,e] = arr;
    console.log(a,c,d,e); // 1 3 4 5
复制代码

上面的代码我们看到,数组里面2的数据是没有被复制的,这是因为我们使用了空位,空位就是在解构赋值的时候,如果某个位置没有数据,那么就会使用空位。

空位不会影响后面的数据,所以3的数据还是会被赋值给c。 上面代码有两个,连着,两个逗号中间就是一个空位。

对象解构

let obj = {
        name: 'zhangsan',
        age: 22,
    }
    let {name,age} = obj;
    console.log(name,age); // zhangsan 22
复制代码

通过上面的例子,我们可以看到,对象的解构赋值和数组的解构赋值是一样的,只不过对象的解构赋值是通过{}来进行解构的。

注意:

  • 我们进行对象解构的时候,定义的变量要与对象里面的属性一样,不可以是其他字符,否则获取不到我们想要的数据。
  • 还有就是,对象解构赋值的时候,如果对象里面没有我们想要的属性,那么就会报错(undefined)。

在数组解构中我们解构时变量顺序可以改变,不会影响到我们最后的结果。

let obj = {
        name: 'zhangsan',
        age: 22,
    }
    let {age,name} = obj;
    console.log(name,age); // zhangsan 22
复制代码

前面我们说到如果我们定义了一个对象不存在的属性,那么就会报错;我们可以这样解决:

我们可以给这些缺失的属性添加一个默认值。

let obj = {
        name: '海绵宝宝',
        age: 22,
    }
    let {name, age, add:'比奇堡'} = obj;
    console.log(name,age,add); // 海绵宝宝 22 比奇堡
复制代码

上面的代码我们可以看到,我们给add属性添加了一个默认值,当我们获取add属性的时候,如果对象里面没有add属性,那么就会使用默认值。

剩余模式

前面我们提到过空位,那么要是我们只要前面一部分数据,后面所有数据想要赋值到其他地方,如果使用传统方法肯定费时费力。那么该怎么办呢?

这时候剩余模式就派上了大用场:

let arr = [1,2,3,4,5];
    let [a,...b] = arr;
    console.log(a,b); // 1 [2,3,4,5]
复制代码

这段代码中,我们将数组第一个数据赋值给a,其余全部数据保存在b里面。

嵌套解构

在实际开发中,我们难免会遇到,某个对象里面还包含着函数这样的结构,那么这种解构赋值又该如何操作呢?

嵌套解构可以做到,它的要求就是等号左侧的结构需要与右侧结构一致。

let obj = {
        ID: { name: '海绵宝宝', age: 22 },
        aihao: '抓水母',
        arr: [1, 2, 3],
    }
    let { ID: { name, age }, aihao, arr: [a, b, c] } = obj;
    console.log(name, age, aihao, a, b, c); // 海绵宝宝 22 抓水母 1 2 3


相关文章
|
4月前
|
JavaScript 前端开发 开发者
混淆赋值运算符(=)和相等比较运算符(==, ===)(js的问题)
混淆赋值运算符(=)和相等比较运算符(==, ===)(js的问题)
28 0
|
2月前
|
JavaScript 前端开发 网络架构
JavaScript编码之路【对象的增强、ES6新特性之函数的默认值设置 、rest参数 (剩余参数)、拓展运算符、对象与数组的解构赋值】
JavaScript编码之路【对象的增强、ES6新特性之函数的默认值设置 、rest参数 (剩余参数)、拓展运算符、对象与数组的解构赋值】
46 1
|
3月前
|
JavaScript
详细讲解JS的解构赋值(Es6)
详细讲解JS的解构赋值(Es6)
|
3月前
|
JavaScript 前端开发 开发者
JavaScript进阶-解构赋值与展开运算符
【6月更文挑战第19天】ES6的解构赋值与展开运算符增强了JS开发效率。解构允许直接从数组或对象提取值,简化数据提取,而展开运算符则用于合并数组和对象或作为函数参数。解构时注意设置默认值以处理不存在的属性,避免过度嵌套。展开运算符需区分数组与对象使用,勿混淆于剩余参数。通过示例展示了这两种操作在数组和对象中的应用,提升代码可读性与简洁度。
127 5
|
3月前
|
JavaScript 前端开发 Java
【JavaScript】ECMAS6(ES6)新特性概览(二):解构赋值、扩展与收集、class类全面解析
【JavaScript】ECMAS6(ES6)新特性概览(二):解构赋值、扩展与收集、class类全面解析
40 2
|
2月前
|
JavaScript API
若依没解构送post请求出现的bug,vue.runtime.esm.js:620 [Vue warn]: Error in mounted hook: “TypeError: (0 , _inde
若依没解构送post请求出现的bug,vue.runtime.esm.js:620 [Vue warn]: Error in mounted hook: “TypeError: (0 , _inde
|
2月前
|
存储 JavaScript 前端开发
js【详解】数据类型原理(含变量赋值详解-浅拷贝)
js【详解】数据类型原理(含变量赋值详解-浅拷贝)
26 0
|
4月前
|
JavaScript 前端开发
JS中运算符的算术、赋值、+、比较(不同类型之间比较)、逻辑
JS中运算符的算术、赋值、+、比较(不同类型之间比较)、逻辑
30 1
|
4月前
|
JavaScript 前端开发
JavaScript高级主题:什么是 ES6 的解构赋值?
【4月更文挑战第13天】ES6的解构赋值语法简化了从数组和对象中提取值的过程,提高代码可读性。例如,可以从数组`[1, 2, 3]`中分别赋值给`a`, `b`, `c`,或者从对象`{x: 1, y: 2, z: 3}`中提取属性值给同名变量。
28 6
|
存储 JavaScript 前端开发
JavaScript 解构赋值实用指南
今天来看看ES6 解构赋值的实用技巧~
117 0