前言

  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. 拉仇恨!webhook + 企业微信给同事做了个代码提交监听工具

    本文案例收录在 https://github.com/chengxy-nds/Springboot-Notebook 大家好,我是小富~ 最近接个任务,用webhook做了个代码提交监听功能,就是有人 ...

  2. MySQL笔记01(黑马)

    一.数据库基本介绍 目标:了解数据库的功能和常见数据库分类.数据库产品 数据库基本知识 数据库分类 SQL简介 MySQL访问 1.数据库基本知识 目标:了解数据库的概念和数据库的作用 概念 数据库: ...

  3. Centos7 安装 Keepalived

    目标: Keeplaived 简单模拟测试一下Nginx 故障切换前言:C7 默认的 1.3.5 似乎有点问题,改装 keepalived-2.0.7 1:安装 Nginx 和确认 (略)2:安装配置 ...

  4. 如何使用 Python 统计分析 access 日志?

    一.前言 性能场景中的业务模型建立是性能测试工作中非常重要的一部分.而在我们真实的项目中,业务模型跟线上的业务模型不一样的情况实在是太多了.原因可能多种多样,这些原因大大降低了性能测试的价值. 今天的 ...

  5. 04:CSS(02)

    溢出属性 p { height: 100px; width: 50px; border: 3px solid red; /*overflow: visible; !*默认就是可见 溢出还是展示*!*/ ...

  6. 【曹工杂谈】Mysql客户端上,时间为啥和本地差了整整13个小时,就离谱

    瞎扯一点非技术 本来今天上午就打算写的,结果中途被别的事吸引了注意力,公司和某保险公司合作推了一个医疗保险,让我们给父母买,然后我研究了半天条款:又想起来之前买的支付宝那个好医保,也买了两年多了,但是 ...

  7. 小白学k8s(9)-gitlab-runner实现go项目的自动化发布

    gitlab构建CI/CD 准备 docker部署gitlab 使用二进制部署gitlab-runner gitlab-runner注册 配置Variables 简单先来个测试 开始构建 遇到的报错 ...

  8. Linux命令大全之挂载命令

    理解:Linux挂载相当于Windows分配盘符 1.查询系统中已挂载的设备 mount 2.设置自动挂载 编辑文件/etc/fstab,把文件写入就可以启动自动挂载了, 注:一般不把光盘写入,如果写 ...

  9. 每日三道面试题,通往自由的道路6——JVM

    茫茫人海千千万万,感谢这一秒你看到这里.希望我的面试题系列能对你的有所帮助!共勉! 愿你在未来的日子,保持热爱,奔赴山海! 每日三道面试题,成就更好自我 今天我们继续聊聊JVM的话题吧! 1. 那你知 ...

  10. iOS-block本质是什么?

    一: block的原理是怎样的?本质是什么? block本质上也是一个OC对象,因为它的内部也有个isa指针 block是封装了函数调用以及函数调用环境的OC对象 接下来我们将通过底层源码来论证上诉两 ...