JS解构赋值-程序员宅基地

技术标签: 前端  javascript  ecmascript  

一、前言

解构赋值语法是一种 Javascript 表达式。通过解构赋值,可以将属性/值从对象/数组中取出,赋值给其他变量。本文将讨论解构赋值的作用与其用法。

目录

一、前言

二、用途

三、数组的解构

1.变量声明并且赋值时的解构

 2.默认值

 3.剩余数组赋值给一个变量

4.解构交换变量 

5.解析一个函数返回的数组

6.二维数组的解构

四、对象的解构

1.基本用法

2.给新的变量名赋值

五、综合

1.解析嵌套对象与数组

2.For of迭代与解构


二、用途

现在我们有一个数组,与三个变量,数组中有3个元素,我们想将数组中的三个元素分别对应赋值给三个变量,我们可以采用以下形式,即可实现。

const arr = ["孙悟空","猪八戒","沙和尚"]
let a,b,c;

a= arr[0];
b= arr[1];
c= arr[2];
console.log(a,b,c);

        但是如果我们元素变成10个或者更多,以这种方式赋值就有一定难度,这时候就需要解构赋值:[a,b,c],给元素写在中括号中间,表示我们给三个变量一起来赋值。

[a,b,c]=["孙悟空","猪八戒","沙和尚"]
//表示数组的第一个元素赋值给第一个变量,第二个赋值给第二个变量,以此类推
console.log(a,b,c);

 我们可以看到两种赋值的效果是一样的。所以解构赋值,故名思意,就是将一个东西解析展开后再赋值给某个东西。

三、数组的解构

1.变量声明并且赋值时的解构

        我们有数组解构与对象解构两种形式,在实际操作中,以[ ]包裹的形式为数组的解构,我们可以直接声明同时解构赋值,我们可以实现声明同时完成解构赋值的操作。

arr = ['孙','悟','空']
let [d,e,f]= arr;
console.log(d,e,f);

 2.默认值

 let [g,h,i,j]=[1,2,3];

console.log(g,h,i,j);

        我们可以看到 j 也进行了赋值,时候解构赋值后 j 的值就是undefined所以为了防止出现undefined的出现,我们可以先在左边对象先预设值默认值。

let a, b;

[a=5, b=7] = [1];
console.log(a); // 1
console.log(b); // 7

 3.剩余数组赋值给一个变量

        我们在解析一个数组时,可以将数组剩余部分赋值给一个变量。 

let [n1,n2,...n3]=[1,2,3,4,5,6,7]//...获取剩余参数
console.log(n1,n2,n3)

 

4.解构交换变量 

没有解构赋值时,我们交换变量采用以下方式

let a1 = 10;
let a2 =20;

let temp =a1;
a1 = a2;
a2=temp;
//这个是我们常规的操作
[a1,a2]=[a2,a1];//这样的解构能实现交换
//表达式左边与右边表示的意义不一样,左边表示的是变量,右边才表示的是值,所以可以通过这种方式实现变量值交换

const arr1 = ["孙悟空","猪八戒"]
[arr1[0],arr[1]]=[arr1[1],arr[0]]//完成两个数组元素交换变量

5.解析一个函数返回的数组

function f() {
  return [1, 2];
}

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

6.二维数组的解构

const arr3 = [[1,2,3],[4,5,6]];
console.log(arr3)
//    假如我们要解构一个二维数组
let [[num1,num2,num3],[num4,num5,num6]]=arr3
//将num1-6分别对应二维数组的六个元素
arr4=[]
[[num1,num2,num3],arr4]=arr3//将num1,num2,num3为1,2,3,arr4为[4,5,6]

四、对象的解构

1.基本用法

 我们在解构对象时,采用以{ }包裹的形式。通过在{}中添加变量名,把对象的属性与{}中的属性名一 一对应实现解构赋值。与数组不同的是,对象的解构赋值不需要按照变量的顺序对应赋值。

const obj = {name:'qb',age:19,gender:'男'};
let {age,name,gender} = obj;
console.log(name,age,gender);

 let {address} = obj;
console.log(address)//undefined

对象中没有address属性就返回undefined

2.给新的变量名赋值

 可以从一个对象中提取变量并赋值给和对象属性名不同的新的变量名

let {name:a,age:b,gender:c} = obj;
console.log(a,b,c)

我们也可以与数组的解构形式相同,给变量先赋予默认值,也可以给新的变量名赋默认值。

五、综合

1.解析嵌套对象与数组

const metadata = {
  title: 'Scratchpad',
  translations: [
    {
      locale: 'de',
      localization_tags: [],
      last_edit: '2014-04-14T08:43:37',
      url: '/de/docs/Tools/Scratchpad',
      title: 'JavaScript-Umgebung'
    }
  ],
  url: '/en-US/docs/Tools/Scratchpad'
};

let {
  title: englishTitle, // rename
  translations: [
    {
       title: localeTitle, // rename
    },
  ],
} = metadata;

console.log(englishTitle); // "Scratchpad"
console.log(localeTitle);  // "JavaScript-Umgebung"

2.For of迭代与解构

var people = [
  {
    name: 'Mike Smith',
    family: {
      mother: 'Jane Smith',
      father: 'Harry Smith',
      sister: 'Samantha Smith'
    },
    age: 35
  },
  {
    name: 'Tom Jones',
    family: {
      mother: 'Norah Jones',
      father: 'Richard Jones',
      brother: 'Howard Jones'
    },
    age: 25
  }
];

for (var {name: n, family: {father: f}} of people) {
  console.log('Name: ' + n + ', Father: ' + f);
}

// "Name: Mike Smith, Father: Harry Smith"
// "Name: Tom Jones, Father: Richard Jones"

 来源于mdn

以上内容如有错误,麻烦大家在评论区指正,让我们共同进步。 加油!!!

如果对您有帮助就给一个关注支持一下吧。 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qi_bai_jin/article/details/127577106

智能推荐

easyui textbox添加blur事件_easyui textbox 怎么绑定blur事件-程序员宅基地

文章浏览阅读4.9k次。今天遇到一个问题,在使用input输入框的时候,想着懒得写样式于是使用了easyui的文本框。想往常一样,我希望在输入框内添加一些事件,以方便做验证之类的。所以我想往常一样在input框内添加blur事件。就在这个时候问题出现了,死活都不进js方法。当遇到问题,首先想到的肯定是调试。打开浏览器的调试控制台,找到相应的标签。问题一下就有答案了!仔细观察,使用easyui生成的input框是包裹的,_easyui textbox 怎么绑定blur事件

如何优雅的设计工作流引擎(荣耀典藏版)_微型workflow-程序员宅基地

文章浏览阅读1.4w次,点赞4次,收藏19次。本文分析了引入工作流引擎的背景,驱使业务逻辑从控制流中剥离出来,让产研团队更聚焦于业务,解决研发效率低的问题。_微型workflow

iView 在From表单中复合类型输入框横向排列_iview input-group-程序员宅基地

文章浏览阅读471次。iView 在From表单中复合类型输入框横向排列的方法_iview input-group

对antd中的表格筛选进行改造_react如何修改antdesign的表格筛选属性样式-程序员宅基地

文章浏览阅读2.9k次。import React from 'react';import './App.css';import { Table, Input, Button, Icon, Checkbox, Row, Col } from 'antd';import Highlighter from 'react-highlight-words';const CheckboxGroup = Checkbox.Gr..._react如何修改antdesign的表格筛选属性样式

android 简单例子-程序员宅基地

文章浏览阅读82次。http://blog.csdn.net/lihe2008125/archive/2009/08/23/4474391.aspx

oracle删除数据只保留时间最早和最新的数据_oracle 保留时间最近一条记录其他都删除-程序员宅基地

文章浏览阅读975次。保留时间最早和最新的数据_oracle 保留时间最近一条记录其他都删除

随便推点

标签有关用法以及锚点定位;-程序员宅基地

文章浏览阅读84次。一.页面内的锚点定位;锚点定位中,就算采用overflow:hidden将滚动条隐藏,但是它依然可以发生锚点定位,实现定点跳转;1.单向定位: 锚定定位实在页面必须要发生滚动的情况下,不滚动也能发生,效果不明显;他的语法见下面代码:<a href="#2">锚点2</a>....文本省略<h2><a name="2" id="2"&g..._标签范围比较大,如何定位到一个点的位置

【算法笔记】竞赛图(有向完全图)(相关题型总结)-程序员宅基地

文章浏览阅读9.9k次,点赞15次,收藏26次。竞赛图(有向完全图)竞赛图也叫有向完全图。每对顶点之间都有一条边相连的有向图称为竞赛图竞赛图的一些简单的性质:竞赛图没有自环,没有二元环;若竞赛图存在环,则一定存在三元环。(如果存在一个环大于三元,那么一定存在另一个三元的小环。)任意竞赛图都有哈密顿路径(经过每个点一次的路径,不要求回到出发点)。图存在哈密顿回路的充要条件是强联通。哈密顿问题中,对于 n 阶竞赛图,当 n 大于等于 2 时一定存在哈密顿通路设 D 为 n 阶有向简单图,若 D 的基图为 n 阶无向完全图,则 D 为 n 阶_竞赛图

改变矩阵形状的代码_return f.linear(input, self.weight, self.bias) run-程序员宅基地

摘要:代码中通过改变矩阵形状来解决矩阵乘法不可行的问题,并继续进行后续的操作。

如何在mysql中执行sql脚本文件_mysql执行sql文件-程序员宅基地

文章浏览阅读7.9k次,点赞7次,收藏19次。在实际的工作中,项目经理会给你一个xxx.sql文件,你执行这个脚本文件,你电脑上的数据库数据就有了!进入到某一个数据库中,source +sql脚本路径。二、在mysql当中怎么执行sql脚本呢?一、sql脚本文件 简介。_mysql执行sql文件

小程序实现tab标签页:可点击切换,滑动切换页面_小程序tab 点击向中间移动-程序员宅基地

文章浏览阅读1.1k次。页面效果:HTML: <view wx:if="{{userType==0}}" style="height:100%"> <view class="tab_box" style="width: 100%"> <view class="tabs_v"> <block wx:for="{{tabs}}" wx:for-item="item" wx:key="index"> <vie._小程序tab 点击向中间移动

ros机器人编程实践(16.3)- 仿真SmartCar之将模型导入gazebo中_ros smartcar gazebo-程序员宅基地

文章浏览阅读1.3k次,点赞2次,收藏19次。前言上一篇博客:ros机器人编程实践(16.2)- 仿真SmartCar之模型“飞起来“上一章我们将模型导入到rviz中并成功的动起来了,但是rviz软件环境主要是用于数据可视化的,处理数据比较方便,真实环境的模型仿真还是需要在gazebo中进行。urdf文件讲解我们之前在16.1中配置的urdf文件只配置了模型的链接方式和形状颜色,只有这些在gazebo物理引擎中是没法进行运动的,需要给..._ros smartcar gazebo