深入理解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 相关文章推荐
js 代码优化点滴记录
Feb 19 Javascript
js中文逗号转英文实现
Feb 11 Javascript
js实现仿百度瀑布流的方法
Feb 05 Javascript
Shell脚本实现Linux系统和进程资源监控
Mar 05 Javascript
JS实现两表格里数据来回转移的方法
May 28 Javascript
javascript设计模式之模块模式学习笔记
Feb 15 Javascript
windows下vue.js开发环境搭建教程
Mar 20 Javascript
jQuery 循环遍历改变a标签的href(实例讲解)
Jul 12 jQuery
vue-router路由懒加载的实现(解决vue项目首次加载慢)
Aug 28 Javascript
js中offset,client , scroll 三大元素知识点总结
Sep 11 Javascript
vue 动态添加class,三个以上的条件做判断方式
Nov 02 Javascript
AJAX实现指定部分页面刷新效果
Oct 16 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 empty,isset,is_null判断比较(差异与异同)
2010/10/19 PHP
PHP5权威编程阅读学习笔记 附电子书下载
2012/07/05 PHP
php根据某字段对多维数组进行排序的方法
2015/03/07 PHP
JS调用页面表格导出excel示例代码
2014/03/18 Javascript
javascript实现2048游戏示例
2014/05/04 Javascript
JavaScript实现带标题的图片轮播特效
2015/05/20 Javascript
Javascript的表单验证-初识正则表达式
2016/03/18 Javascript
使用Bootstrap typeahead插件实现搜索框自动补全的方法
2016/07/07 Javascript
Vue.js 和 MVVM 的注意事项
2016/11/07 Javascript
js实现图片360度旋转
2017/01/22 Javascript
详细讲解vue2+vuex+axios
2017/05/27 Javascript
vue轮播图插件vue-awesome-swiper的使用代码实例
2017/07/10 Javascript
JS设计模式之状态模式概念与用法分析
2018/02/05 Javascript
JQuery获取元素尺寸、位置及页面滚动事件应用示例
2019/05/14 jQuery
JS实现点击生成UUID的方法完整实例【基于jQuery】
2019/06/12 jQuery
微信JSSDK实现打开摄像头拍照再将相片保存到服务器
2019/11/15 Javascript
Vue实现验证码功能
2019/12/03 Javascript
element-ui点击查看大图的方法示例
2020/12/14 Javascript
Python random模块(获取随机数)常用方法和使用例子
2014/05/13 Python
Pyhton中防止SQL注入的方法
2015/02/05 Python
浅谈python 四种数值类型(int,long,float,complex)
2016/06/08 Python
Python实现在线音乐播放器
2017/03/03 Python
PyQt5每天必学之滑块控件QSlider
2018/04/20 Python
获取django框架orm query执行的sql语句实现方法分析
2019/06/20 Python
python模拟键盘输入 切换键盘布局过程解析
2019/08/15 Python
python框架flask表单实现详解
2019/11/04 Python
html5 Canvas画图教程(5)—canvas里画曲线之arc方法
2013/01/09 HTML / CSS
创联软件面试题笔试题
2012/10/07 面试题
白酒市场开发计划书
2014/01/09 职场文书
商场消防管理制度
2014/01/12 职场文书
书香家庭事迹材料
2014/05/09 职场文书
优秀班集体先进事迹材料
2014/05/28 职场文书
企业晚会策划方案
2014/05/29 职场文书
导游欢送词
2015/01/31 职场文书
小学中队活动总结
2015/05/11 职场文书
小学家庭教育心得体会
2016/01/14 职场文书