深入理解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 相关文章推荐
Mootools 1.2教程 函数
Sep 15 Javascript
基于KMP算法JavaScript的实现方法分析
May 03 Javascript
使用phantomjs进行网页抓取的实现代码
Sep 29 Javascript
AngularJS入门教程中SQL实例详解
Jul 27 Javascript
使用Javascript监控前端相关数据的代码
Oct 27 Javascript
javascript实现非常简单的小数取整功能示例
Jun 13 Javascript
微信小程序实现根据字母选择城市功能
Aug 16 Javascript
electron demo项目npm install安装失败的解决方法
Feb 06 Javascript
layui radio单选限制下一个radio单选的实例
Sep 03 Javascript
微信小程序批量上传图片到七牛(推荐)
Dec 19 Javascript
JS删除数组指定值常用方法详解
Jun 04 Javascript
Javascript实现贪吃蛇小游戏(含详细注释)
Oct 23 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 smarty 二级分类代码和模版循环例子
2011/06/16 PHP
ThinkPHP 防止表单重复提交的方法
2011/08/08 PHP
php&mysql 日期操作小记
2012/02/27 PHP
PHP+Jquery与ajax相结合实现下拉淡出瀑布流效果【无需插件】
2016/05/06 PHP
PHP文件与目录操作示例
2016/12/24 PHP
jQuery formValidator表单验证插件开源了 含API帮助、源码、示例
2008/08/14 Javascript
Javascript判断对象是否相等实现代码
2013/03/18 Javascript
JavaScript的Date()方法使用详解
2015/06/09 Javascript
全面介绍javascript实用技巧及单竖杠
2016/07/18 Javascript
在localStorage中存储对象数组并读取的方法
2016/09/24 Javascript
移动端脚本框架Hammer.js
2016/12/15 Javascript
使用vue-cli(vue脚手架)快速搭建项目的方法
2018/05/21 Javascript
jQuery实现百度图片移入移出内容提示框上下左右移动的效果
2018/06/05 jQuery
微信小程序画布圆形进度条显示效果
2020/11/17 Javascript
nodejs之koa2请求示例(GET,POST)
2018/08/07 NodeJs
Node.js 多进程处理CPU密集任务的实现
2019/05/26 Javascript
详解element上传组件before-remove钩子问题解决
2020/04/08 Javascript
关于vue 项目中浏览器跨域的配置问题
2020/11/10 Javascript
[00:15]TI9地铁玩家打卡
2019/08/11 DOTA
python使用BeautifulSoup分页网页中超链接的方法
2015/04/04 Python
python判断windows系统是32位还是64位的方法
2015/05/11 Python
Python函数返回值实例分析
2015/06/08 Python
Python实现批量检测HTTP服务的状态
2016/10/27 Python
python判断自身是否正在运行的方法
2019/08/08 Python
从python读取sql的实例方法
2020/07/21 Python
python获取命令行参数实例方法讲解
2020/11/02 Python
美国老牌主机服务商:iPage
2016/07/22 全球购物
法国在线药房:Shop Pharmacie
2019/11/26 全球购物
甲方资料员岗位职责
2013/12/13 职场文书
决心书标准格式
2014/03/11 职场文书
2014年初一班主任工作总结
2014/11/08 职场文书
2014年劳动部工作总结
2014/12/11 职场文书
继承公证书格式
2015/01/26 职场文书
2017寒假社会实践心得体会范文
2016/01/14 职场文书
小学生六年级作文之关于感恩
2019/08/16 职场文书
浅谈为什么我的 z-index 又不生效了
2022/07/15 HTML / CSS