前言

  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. Scrum Master 生存指南

    近年来,出现了一批新兴且广受关注的岗位,以 Scrum Master 为典型代表.2018年,Scrum Master 的平均工资为98239美元.领英更是将其列为2019年最有前途的工作之一.但对于 ...

  2. python解析ua

    一个非常神奇的包可以帮助我们优雅的解析浏览器的UA,他的名字叫做user_agents pip install pyyaml ua-parser user-agents >>>ua_ ...

  3. 72 个网络应用安全实操要点,全方位保护 Web 应用的安全

    原文地址:Web Application Security Checklist 原文作者:Teo Selenius(已授权) 译者 & 校正:HelloGitHub-小熊熊 & 卤蛋 ...

  4. spring 声明式事务剖析

    spring事务是在数据库事务的基础上进行封装扩展, 支持原有事务的隔离级别, 加入了事务传播的概念,提供多个事务合并和分割的功能, 提供声明式事务,让事务和业务代码分开 spring提供了三个接口供 ...

  5. WEB 页面认证

    1:安装htpasswd工具生成加密文件 安装工具 # yum install httpd-tools # htpasswd -cm /etc/httpd/passwd/password useraN ...

  6. 【NX二次开发】Block UI 线型

    属性说明 常规         类型 描述     BlockID     String 控件ID     Enable     Logical 是否可操作     Group     Logical ...

  7. Java JDK 动态代理(AOP)使用及实现原理分析

    一.什么是代理? 代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问.代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理. 代理模式U ...

  8. .Net Core with 微服务 - Seq 日志聚合

    上一次我们介绍并演示了如果使用 Consul 做为我们微服务的注册中心,来实现服务的注册与发现.那么本次我们讲会演示如何做日志聚合.日志聚合比较常用的有 ELK 等,但是这次我想要介绍的是一款比较小众 ...

  9. CentOS安装ffmpeg+h264

    CentOS安装ffmpeg+h264 前言 坑!坑!坑! 全是坑. 本文安装系统环境为CentOS7.2.我这里提供安装所需的四个源码包,均需要编译安装.所有组件最好都安装最新的稳定版,或者下载使用 ...

  10. ES6学习笔记之 let与const

    在js中,定义变量时要使用var操作符,但是var有许多的缺点,如:一个变量可以重复声明.没有块级作用域.不能限制修改等. //缺点1:变量可以重复声明 var a=1; var a=2; conso ...