前言

  es6 中引入了解构这一新特性,了解解构成为一个格合前端必须掌握的基础知识,不仅作为了面试的重要考查知识,同时能极大提高我们平常工作的开发效率。本文来总结一下需要掌握的解构知识点。

正文

  1.什么是解构赋值

  解构赋值允许你使用类似数组或对象字面量的语法将数组和对象的属性赋给各种变量。这种赋值语法极度简洁,同时还比传统的属性访问方法更为清晰。解构有什么作用呢?解构提供了更方便的数据访问。下面对比一下es6的解构之前后访问对象或者数组的信息的方式对比:

    // Es6之前
let obj = { name: "小明", sex: "男" };
var name = obj.name
var sex = obj.sex
console.log(name);//小明
console.log(sex)//男
// Es6之后
let info = { name: "xiaoming", age: "18" }
var { name ,age} = info
console.log(name);//xiaoming
console.log(age);//18

  2.对象解构

  (1)解构赋值

    let obj = {
type: "objType",
}
type = "myType";
({ type } = obj) ;
console.log(type);//objType
  这里必须使用()因为默认js会把{}解析为代码块,块语句不允许在赋值语句左侧出现,加了()之后,该语句被当作表达式,不是块语句,从而完成赋值操作。
 
  (2)解构默认值,设置默认值
    let obj = {
type: "objType",
}
let { type, type1,type2 = "type2" } = obj
console.log(type);//objType
console.log(type1);//undefined
console.log(type2);//type2
  当使用解构赋值语句时,如果所指定的本地变量在对象中没有找到同名属性,那么该变量会被赋值为undefined。type2变量被赋值为默认值 type2 ,当obj对象中招不到同名属性的时候,使用了默认值。
 

  (3)解构后赋值给不同的本地变量名

    let obj = {
type: "objType",
};
let { type: myType, name: otherName = "otherName" } = obj;
console.log(myType);//objType
console.log(otherName);//otherName

  上面的代码,首先读取 type 变量的属性,并把它的值存储在变量 myType 上,后半行由于 obj 中不存在 name 属性 ,赋值给 otherName的时候使用了默认值。

  (4)嵌套的对象解构

    let myInfo = {
name: "xiaomign",
loc: {
start: {
data: "123"
},
end: {
data: "345"
}
}
}
let { name, loc: { start: { data: myDate } } } = myInfo
console.log(myDate);//123

  

  3.数组解构

  (1)解构赋值

        var arr = ["red", "blue", "green"]
var [firstColor, secondColor] = arr
console.log(firstColor);//red
var [, , thirdColor] = arr
console.log(thirdColor);//green

  

  (2)两个变量交换位置

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

  

  (3)设置默认值

        let arr = ["red", "blue", "green"]
let [first,second = "second",third,four = "four"] = arr
console.log(first);//red
console.log(second);//blue
console.log(third);//green
console.log(four);//four

  

  (4)嵌套解构

        var colorArr = ["red",["red1","red2"],"blue"]
var [first,[first1]] = colorArr
console.log(first1);//red1

  

  (5)剩余解构

        var arr = ["red", "blue", "green"]
var [first,...restArr] = arr
console.log(restArr);//["blue","green"]

  (6)数组克隆

        // es6之前数组克隆
let arr = ["red", "blue", "green"]
let cloneArr = arr.concat()
console.log(cloneArr);//["red", "blue", "green"]
// es6利用剩余解构完成数组克隆
let [...cloneArr1] = arr
console.log(cloneArr1) //["red", "blue", "green"]

  4.混合解构

        let node = {
name: "foo",
loc: {
start: {
line: 1,
column: 1
},
end: {
line: 1,
column: 4
}
},
range: [0, 3]
};
let {
loc: { start },
range: [startIndex]
} = node;
console.log(start.line); // 1
console.log(start.column); // 1
console.log(startIndex); // 0

写在最后

  以上就是本文的全部内容,希望给读者带来些许的帮助和进步,方便的话点个关注,小白的成长踩坑之路会持续更新一些工作中常见的问题和技术点。

 

js--ES6新特性之解构的更多相关文章

  1. ES6新特性之解构使用细节

    ES6的解构说白了就是能够让我们一次性取到多个值,大致可分为一下几个方面 1.数组解构 普通的一维数组解构,如下one = array[0],two=array[1],three=array[2] v ...

  2. javascript ES6 新特性之 解构

    解构的作用是可以快速取得数组或对象当中的元素或属性,而无需使用arr[x]或者obj[key]等传统方式进行赋值 var arr = [1, 2, 3]; //传统方式 var a = arr[0], ...

  3. JavaScript ES6 新特性详解

    JavaScript ES6 带来了新的语法和新的强大功能,使您的代码更现代,更易读 const ,  let and var 的区别: const , let 是 ES6 中用于声明变量的新关键字. ...

  4. ECMAscript6新特性之解构赋值

    在以前,我们要对变量赋值,只能直接指定值.比如:var a = 1;var b = 2;但是发现这种写法写起来有点麻烦,一点都不简洁,而在ECMAScript6中引入了一种新的概念,那就是" ...

  5. ECMA Script 6新特性之解构赋值

    1.基本概念用法 1.1解构赋值:ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值. var a = 1; var b = 2; var c = 3; /*上述赋值语句用解构赋值为*/ v ...

  6. ES6,ES2105核心功能一览,js新特性详解

    ES6,ES2105核心功能一览,js新特性详解 过去几年 JavaScript 发生了很大的变化.ES6(ECMAScript 6.ES2105)是 JavaScript 语言的新标准,2015 年 ...

  7. Atitit js版本es5 es6新特性

    Atitit js版本es5 es6新特性 Es5( es5 其实就是adobe action script的标准化)1 es6新特性1 Es5( es5 其实就是adobe action scrip ...

  8. Atitit js es5 es6新特性 attilax总结

    Atitit js es5 es6新特性 attilax总结 1.1. JavaScript发展时间轴:1 1.2. 以下是ES6排名前十的最佳特性列表(排名不分先后):1 1.3. Es6 支持情况 ...

  9. ES6新特性三: Generator(生成器)函数详解

    本文实例讲述了ES6新特性三: Generator(生成器)函数.分享给大家供大家参考,具体如下: 1. 简介 ① 理解:可以把它理解成一个函数的内部状态的遍历器,每调用一次,函数的内部状态发生一次改 ...

随机推荐

  1. 灵动微电子ARM Cortex M0 MM32F0010 Timer定时器中断定时功能的配置

    灵动微电子ARM Cortex M0 MM32F0010 Timer定时器中断定时功能的配置 目录: 1.Timer1高级定时器Timer3通用定时器Timer14基本定时器简介 2.Timer1高级 ...

  2. .Net Core gRPC 实战(二)

    概述 gRPC 客户端必须使用与服务相同的连接级别安全性.  如调用服务时通道和服务的连接级别安全性不一致,gRPC 客户端就会抛出错误. gRPC 配置使用HTTP gRPC 客户端传输层安全性 ( ...

  3. Python+Selenium自动化-定位页面元素的八种方法

    Python+Selenium自动化-定位页面元素的八种方法   本篇文字主要学习selenium定位页面元素的集中方法,以百度首页为例子. 0.元素定位方法主要有: id定位:find_elemen ...

  4. OpenCV 查找轮廓

    本文将结合实例代码,介绍 OpenCV 如何查找轮廓.获取边界框. 代码: contours.py OpenCV 提供了 findContours 函数查找轮廓,需要以二值化图像作为输入.并指定些选项 ...

  5. 自然语言推理:微调BERT

    自然语言推理:微调BERT Natural Language Inference: Fine-Tuning BERT SNLI数据集上的自然语言推理任务设计了一个基于注意力的体系结构.现在通过微调BE ...

  6. 接触追踪解决方案建立在UWB而不是蓝牙上

    接触追踪解决方案建立在UWB而不是蓝牙上 Contact tracing solution builds on UWB rather than Bluetooth 几个月前,当社会距离明显成为对抗CO ...

  7. Navicat Premium 15 安装包&激活工具及安装教程(亲测可用)

    Navicat Premium 15 安装包及激活工具 网盘地址: 链接:https://pan.baidu.com/s/1GU9qgdG1dRCw9Un8H9Ba9A提取码:F1r9 开始安装 下载 ...

  8. EasyExcel 框架使用-读

    EasyExcel 框架使用 官方介绍:JAVA解析Excel工具EasyExcel Java解析.生成Excel比较有名的框架有Apache poi.jxl.但他们都存在一个严重的问题就是非常的耗内 ...

  9. 性能工具之Jmeter小白入门系列之一

    一.简单了解 Apache JMeter The Apache JMeter application is open source software, a 100% pure Java applica ...

  10. Spring MVC 到 Spring BOOT 的简化之路

    背景 Spring vs Spring MVC vs Spring Boot Spring FrameWork Spring 还能解决什么问题 Spring MVC 为什么需要Spring Boot ...