深入理解ES6之数据解构的用法


Posted in Javascript onJanuary 13, 2018

一 对象解构

对象解构语法在赋值语句的左侧使用了对象字面量

let node = {
  type: true,
  name: false
}

//既声明又赋值
let {
  type,
  name
} = node;

//或者先声明再赋值
let type, name
({type,name} = node);
console.log(type);//true
console.log(name);//false

type与name标识符既声明了本地变量,也读取了对象的相应属性值。

解构赋值表达式的值为表达式右侧的值。当解构表达式的右侧的计算结果为null或者undefined时,会抛出错误。

默认值

当你使用解构赋值语句时,如果所指定的本地变量在对象中没有找到同名属性,那么该变量会被赋值为undefined

let node = {
  type: true,
  name: false
},
  type, name, value;
({type,value,name} = node);

console.log(type);//true
console.log(name);//false
console.log(value);//undefined

你可以选择性地定义一个默认值,以便在指定属性不存在时使用该值。

let node = {
    type: true,
    name: false
  },
  type, name, value;
({
  type,
  value = true,
  name
} = node);

console.log(type);//true
console.log(name);//false
console.log(value);//true

赋值给不同的本地变量名

let node = {
  type: true,
  name: false,
  value: "dd"
}
let {
  type: localType,
  name: localName,
  value: localValue = "cc"
} = node;
console.log(localType);
console.log(localName);
console.log(localValue);

type:localType这种语法表示要读取名为type的属性,并把它的值存储在变量localType上。该语法与传统对象字面量的语法相反

嵌套的对象结构

let node = {
type: "Identifier",
name: "foo",
loc: {
  start: {
    line: 1,
    column: 1
  },
  end: {
    line: 1,
    column: 4
  }
}
}

let {
loc: localL,
loc: {
  start: localS,
  end: localE
}
} = node;

console.log(localL);// start: {line: 1,column: 1},end: {line: 1,column: 4}
console.log(localS);//{line: 1,column: 1}
console.log(localE);//{line: 1,column: 4}

当冒号右侧存在花括号时,表示目标被嵌套在对象的更深一层中(loc: {start: localS,end: localE})

二 数据解构

数组解构的语法看起来跟对象解构非常相似,只是将对象字面量换成了数组字面量。

let colors = ["red", "blue", "green"];
let [firstC, secondC, thirdC, thursC = "yellow"] = colors;
console.log(firstC//red
console.log(secondC);//blue
console.log(thirdC);//green
console.log(thursC);//yellow

你也可以在解构模式中忽略一些项,并只给感兴趣的项提供变量名。

let colors = ["red","green","blue"];

let [,,thirdC] = colors;
console.log(thirdC);//blue

thirdC之前的逗号是为数组前面的项提供的占位符。使用这种方法,你就可以轻易从数组任意位置取出值,而无需给其他项提供名称。

解构赋值

let colors = ["red","green","blue"],
  firstColor = "black",
  secondColor = "purple";
[firstColor,secondColor] = colors;
console.log(firstColor);//red
console.log(secondColor);//green

数组解构有一个非常独特的用例,能轻易的互换两个变量的值。

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

嵌套的解构

let colors = ["red", ["green", "blue"], "yellow"];
let [firstC, [, ssc]] = colors;
console.log(ssc);//blue

剩余项

let colors = ["red", "green", "blue"];
let [firstC, ...restC] = colors;
console.log(firstC);
console.log(...restC);
console.log(restC[0]);//green
console.log(restC[1]);//blue

使用剩余项可以进行数组克隆

let colors = ["red", "green", "blue"];
let [...restC] = colors;
console.log(restC);//["red", "green","blue"]

三 混合解构

let node = {
type: "Identifier",
name: 'foo',
loc: {
  start: {
    line: 1,
    column: 1
  },
  end: {
    line: 1,
    column: 4
  }
},
range: [0, 3]
}

let {
type,
name: localName,
loc: {
  start: {
    line: ll
  },
  end: {
    column: col
  }
},
range: [, second]
} = node;

console.log(type);//Identifier
console.log(localName);//foo
console.log(ll);//1
console.log(col);//4
console.log(second);//3

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
div模拟选择框示例代码
Nov 03 Javascript
验证控件与Button的OnClientClick事件详细解析
Dec 04 Javascript
JavaScript四种调用模式和this示例介绍
Jan 02 Javascript
javascript去除空格方法小结
May 21 Javascript
js自定义select下拉框美化特效
May 12 Javascript
基于bootstrap实现收缩导航条
Mar 17 Javascript
JS使用对象的defineProperty进行变量监控操作示例
Feb 02 Javascript
Vue 使用formData方式向后台发送数据的实现
Apr 14 Javascript
原生js实现针对Dom节点的CRUD操作示例
Aug 26 Javascript
原生JS实现烟花效果
Mar 10 Javascript
Element Input输入框的使用方法
Jul 26 Javascript
JavaScript高级程序设计之基本引用类型
Nov 17 Javascript
详解ES6语法之可迭代协议和迭代器协议
Jan 13 #Javascript
详解如何在React组件“外”使用父组件的Props
Jan 12 #Javascript
vue使用element-ui的el-input监听不了回车事件的解决方法
Jan 12 #Javascript
微信小程序实现的涂鸦功能示例【附源码下载】
Jan 12 #Javascript
js 索引下标之li集合绑定点击事件
Jan 12 #Javascript
简单的Vue SSR的示例代码
Jan 12 #Javascript
详解如何在react中搭建d3力导向图
Jan 12 #Javascript
You might like
PHP中使用unset销毁变量并内存释放问题
2012/07/05 PHP
Zend Framework实现具有基本功能的留言本(附demo源码下载)
2016/03/22 PHP
Yii2.0 模态弹出框+ajax提交表单
2016/05/22 PHP
Laravel5.1 框架Request请求操作常见用法实例分析
2020/01/04 PHP
jQuery 使用手册(七)
2009/09/23 Javascript
jquery eval解析JSON中的注意点介绍
2013/08/23 Javascript
用js格式化金额可设置保留的小数位数
2014/05/09 Javascript
jquery.idTabs 选项卡使用示例代码
2014/09/03 Javascript
Javascript数组操作函数总结
2015/02/05 Javascript
jquery中cookie用法实例详解(获取,存储,删除等)
2016/01/04 Javascript
jquery ui dialog替代confirm实例分析
2016/01/25 Javascript
深入理解js promise chain
2016/05/05 Javascript
老生常谈Javascript中的原型和this指针
2016/10/09 Javascript
浅谈bootstrap使用中的一些问题以及解决过程
2016/10/18 Javascript
JavaScript实现body内任意节点的自定义属性功能示例
2017/09/18 Javascript
JavaScript使用indexOf()实现数组去重的方法分析
2018/09/04 Javascript
React如何解决fetch跨域请求时session失效问题
2018/11/02 Javascript
js指定日期增加指定月份的实现方法
2018/12/19 Javascript
jQuery Datatables 动态列+跨列合并实现代码
2020/01/30 jQuery
Python使用os模块和fileinput模块来操作文件目录
2016/01/19 Python
KMP算法精解及其Python版的代码示例
2016/06/01 Python
Python如何快速上手? 快速掌握一门新语言的方法
2017/11/14 Python
Python常用数据类型之间的转换总结
2019/09/06 Python
Django DRF路由与扩展功能的实现
2020/06/03 Python
美国领先的精品家居照明和装饰产品在线零售商:LightsOnline.com
2018/01/23 全球购物
FOREO斐珞尔官方旗舰店:LUNA露娜洁面仪
2018/03/11 全球购物
JBL澳大利亚官方商店:扬声器、耳机和音响系统
2018/05/24 全球购物
医学专业五年以上个人求职信
2013/12/03 职场文书
大学生社会实践自我鉴定
2014/03/24 职场文书
关于读书的演讲稿500字
2014/08/27 职场文书
大学生党员个人对照检查材料范文
2014/09/25 职场文书
普通党员四风问题对照检查材料
2014/09/27 职场文书
七个Python必备的GUI库
2021/04/27 Python
SpringBoot集成Redis的思路详解
2021/10/16 Redis
windows10声卡驱动怎么安装?win10声卡驱动安装操作步骤教程
2022/08/05 数码科技
GO中sync包自由控制并发示例详解
2022/08/05 Golang