JS 解构赋值

这篇具有很好参考价值的文章主要介绍了JS 解构赋值。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

JS 解构赋值

ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,被称为解构赋值。这种写法属于“模式匹配”。这种方式的出现大大提高了代码的扩展性。

数组解构

从数组中提取值,按照对应位置,对变量赋值。匹配采用模式匹配,匹配的到就获取值,匹配不到就是 undefined。

我们来看这段代码,这就是数组解构的简单使用,等号左侧的数组字面量中的每个变量名称映射为右侧数组的相同位置的元素。

let [a, b, c] = [1, 2, 3];

等价于下面的代码

let a = 1;
let a = 2;
let a = 3;

默认值

解构语法允许我们设置默认值,当我们解构后的值为 undefined 时,默认值就会被赋给该变量。

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

ES6 内部使用严格相等运算符(===)判断一个位置是否有值。只有当一个数组成员严格等于 undefined,默认值才会生效。数组成员等于 null 默认值不生效。

// 结构的值为 null
let [c = 0] = [null];
console.log(c)//null

默认值是惰性求值,如果默认值是一个表达式,并且解构的值不为 undefined,那么该表达式不会被求值。

function test() {
  console.log('执行');
  return 0;
}
let [c = test()] = [null];
console.log(c)//null

忽略值

当我们只想拿到数组里部分值时,可以忽略不想要的值。

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

收集剩余值

若只想拿到数组中某一项的值,又不想丢掉后边的值可以这样做。

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

嵌套数组解构

可以看到下面的数组结构的结构的结果与‘收集剩余值’的结果一样。

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

下面的代码是准确的拿到每一项的值,因为

let [a, [b, c]] = [2, [3, 4]];
console.log(a)//2
console.log(b)//3
console.log(c)//4

字符串解构

在数组解构中,解构的目标若为可遍历对象,皆可进行解构赋值,可遍历对象即实现Iterator 接口的数据。

let myName = '孤城浪人';
let [n, a, m, e] = myName;
console.log(n)//孤
console.log(a)//城
console.log(m)//浪
console.log(e)//人

// 也可以使用扩展操作符
let [b, ...c] = myName;
console.log(b)//孤
console.log(c)//['城', '浪', '人']

对象解构

对象解构跟数组解构很相似。唯一需要注意的是数组必须要位置一致,而对象则必须要属性名一致才能解构成功

// 简单使用
let obj = {
  name: '孤城浪人',
  age: 18
}
let { name, age } = obj;
console.log(name);//孤城浪人
console.log(age);//18

赋值给新变量名

如果原对象的属性名太长,在解构的时候可以给该属性重命名,规则{原属性名:新属性名}

let obj = {
  name: '孤城浪人',
  age: 18
}
let { name: a, age: b } = obj;
console.log(a);//孤城浪人
console.log(b);//18

默认值

对象解构依然可以给默认值。下面的代码中 obj 对象中没有 nam 属性,所以它的值就是默认值。

let obj = {
  name: '孤城浪人',
  age: 18
}
let { nam = '孤城', age = 22 } = obj;
console.log(nam);//孤城浪人
console.log(age);//18

收集剩余值

对象也可以使用扩展操作符来搜集剩余的值。

let obj = {
  name: '孤城浪人',
  age: 18,
  sex: 'man'
}
let { name = '孤城', ...obj1 } = obj;
console.log(name);//孤城浪人
console.log(obj1);//{age: 18, sex: 'man'}

复杂对象解构

有时会遇到复杂对象(嵌套对象、数组)的解构情况,如下面的代码所示。

let people = {
    name: 'super',
    age: 18,
    like: ['篮球', '羽毛球'],
    history: [
        { name: 'mvp' },
        { name: 'cba' },
        { name: 'm' }
    ]
};
let {like, history: [first, second, third] } = people;
console.log(like); // ['篮球', '羽毛球']
console.log(first); // {name: 'mvp'}

应用

解构函数参数

无非就是函数的参数是对象或者数组,规则和解构对象或数组一致。

let obj = {
  name: '孤城浪人',
  age: 18
}
function test({ name, age }) {
  console.log(name, age); // 孤城浪人 18
}
test(obj);

解构函数返回值

当时函数的返回值是一个对象或则数组时依然可以解构。

function test() {
  let obj = {
    name: '孤城浪人',
    age: 18
  }
  return obj;
}
let { name, age } = test(obj);
console.log(name, age); // 孤城浪人 18

交换两个变量的值

以前想要交换两个变量的值必须要有一个中间变量暂时保存其中一个变量的值。如下代码

let a = 1, b = 2;
let c = a;
a = b;
b = c;

但是有了解构赋值就不需要了,一行代码搞定。

let a = 1, b = 2;
[b, a] = [a, b];

参考文章
ES6基础系列之变量的解构赋值
[JavaScript]解构赋值详解

我是孤城浪人,一名正在前端路上摸爬滚打的菜鸟,欢迎你的关注。文章来源地址https://www.toymoban.com/news/detail-461760.html

到了这里,关于JS 解构赋值的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JavaScript解构赋值常用操作

    所谓数组解构,就是获取数组中一部分有用的数据,例子: 数组解构还可以和 split 函数配合使用,优雅又高端: 解构也可以叫做“解构赋值”,其本质就是把数组的元素复制给变量,所以原数组没有发生任何的变化 在使用解构赋值的时候,希望得到数组的第 1 、 3 个元素,

    2024年02月16日
    浏览(27)
  • JavaScript:解构赋值【数组】

    在JavaScript编程中,解构赋值是一项强大的技术,它能够让我们从数组中迅速提取数据并将其赋值给变量。本文将详细介绍数组解构赋值,以通俗易懂的方式帮助你掌握这一实用技巧。 1. 什么是解构赋值? 解构赋值是一种从复杂数据结构(如数组、对象等)中提取数据并赋值

    2024年02月13日
    浏览(33)
  • [ES6]解构与赋值

    解构赋值是对赋值运算符的扩展。 通过解构,可以更加简单的获取复杂对象的属性 解构的源,解构赋值表达式的右边部分 解构的目标,解构赋值表达式的左边部分 当变量名称与对象中的属性名称一致时,可简写 {attr} 使用解构方式获取对象参数中的对应属性,这样在函数内部

    2023年04月22日
    浏览(40)
  • ES实用的深度解构赋值方法

    ES6 中允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。 使用解构赋值可以将复杂的代码整理的更加干净整洁。 在没有使用解构之前,想要确定对象中的某些属性,那么就需要从对象中获取属性然后赋值给变量,这样会让代码显得非

    2024年02月03日
    浏览(36)
  • let、const、var的区别,解构赋值,箭头函数

    使用var声明的变量,其作用域为该语句所在的函数内,且存在变量提升现象。 使用let声明的变量,其作用域为该语句所在的代码块内,不存在变量提升。 使用const声明的是常量,在后面出现的代码块中,不能在修改改常量的值。 var let const 函数级作用域 块级作用域 块级作用域 变量提

    2024年02月05日
    浏览(47)
  • 前端面试题---深拷贝、浅拷贝的实现和解构赋值

    在 JavaScript 中实现深拷贝和浅拷贝可以采用不同的方法。下面分别介绍这两种拷贝方式的实现方式 1.浅拷贝(Shallow Copy) 浅拷贝(shallow copy)是一种复制对象或数组的操作,创建一个新的对象或数组,并将原始对象或数组的属性或元素的引用复制到新的对象或数组中。这意味

    2024年02月08日
    浏览(82)
  • ES6之 变量的解构赋值 ➕ 扩展运算符(…)

    一看就懂,代码如下: 效果如下: 如下: 如下: 什么是扩展运算符(…运算符)? 就是展开语法 (Spread syntax), 可以在函数调用/数组构造时,将数组表达式或者 string 在语法层面展开;还可以在构造字面量对象时,将对象表达式按 key-value 的方式展开。(译者注: 字面量一般指

    2024年02月09日
    浏览(39)
  • JavaScript全解析——ES6函数中参数的默认值和解构赋值

    本文为千锋资深前端教学老师带来的【JavaScript全解析】系列,文章内含丰富的代码案例及配图,从0到1讲解JavaScript相关知识点,致力于教会每一个人学会JS! 文末有本文重点总结,可以收藏慢慢看~ 更多技术类内容,主页关注一波! 给函数的形参设置一个默认值, 当你没有传

    2024年02月05日
    浏览(37)
  • ES6 全详解 let 、 const 、解构赋值、剩余运算符、函数默认参数、扩展运算符、箭头函数、新增方法,promise、Set、class等等

    ​ ECMAScript 6.0,简称 ES6,是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了。它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言 要讲清楚这个问题,需要回顾历史。1996 年 11 月,JavaScript 的创造者 Netscape 公司,决定将 JavaSc

    2024年04月15日
    浏览(40)
  • js的数组解构

    数组解构(Array Destructuring)时,有几个重要的概念需要了解: 基本数组解构: 可以使用方括号( [] )来定义解构模式。 解构模式将数组中的值分配给对应的变量。 解构是基于位置的,变量的顺序应与数组中的元素对应。 默认值: 可以为解构的变量指定默认值,以防止解

    2024年02月13日
    浏览(23)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包