深入理解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中使用"with"语句中跨frame的变量引用问题
Mar 08 Javascript
用cookies实现的可记忆的样式切换效果代码下载
Dec 24 Javascript
jQuery实现页面滚动时层智能浮动定位实例探讨
Mar 29 Javascript
jQuery实现点击标题输入详细信息
Apr 16 Javascript
JavaScript实现三阶幻方算法谜题解答
Dec 29 Javascript
Javascript实现快速排序(Quicksort)的算法详解
Sep 06 Javascript
VUE利用vuex模拟实现新闻点赞功能实例
Jun 28 Javascript
jQuery实现导航样式布局操作示例【可自定义样式布局】
Jul 24 jQuery
vue里input根据value改变背景色的实例
Sep 29 Javascript
浅谈JavaScript 代码简洁之道
Jan 09 Javascript
vue缓存的keepalive页面刷新数据的方法
Apr 23 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
图文详解phpstorm配置Xdebug进行调试PHP教程
2016/06/13 PHP
详解PHP实现支付宝小程序用户授权的工具类
2018/12/25 PHP
js获取单元格自定义属性值的代码(IE/Firefox)
2010/04/05 Javascript
理解Javascript_14_函数形式参数与arguments
2010/10/20 Javascript
js的匿名函数使用介绍
2013/12/11 Javascript
jQuery对于显示和隐藏等常用状态的判断方法
2014/12/13 Javascript
js对象继承之原型链继承实例
2015/01/10 Javascript
JavaSacript中charCodeAt()方法的使用详解
2015/06/05 Javascript
Bootstrap Metronic完全响应式管理模板之菜单栏学习笔记
2016/07/08 Javascript
JS简单测试循环运行时间的方法
2016/09/04 Javascript
JS插件plupload.js实现多图上传并显示进度条
2016/11/29 Javascript
JS无缝滚动效果实现方法分析
2016/12/21 Javascript
JS自定义滚动条效果简单实现代码
2020/10/27 Javascript
详解react服务端渲染(同构)的方法
2017/09/21 Javascript
JS使用tofixed与round处理数据四舍五入的区别
2017/10/25 Javascript
详解webpack+express多页站点开发
2017/12/22 Javascript
vue 自定义 select内置组件
2018/04/10 Javascript
webpack分离css单独打包的方法
2018/06/12 Javascript
解决layer弹层遮罩挡住窗体的问题
2018/08/17 Javascript
iview在vue-cli3如何按需加载的方法
2018/10/31 Javascript
详解axios中封装使用、拦截特定请求、判断所有请求加载完毕)
2019/04/09 Javascript
详解Python核心编程中的浅拷贝与深拷贝
2018/01/07 Python
Selenium鼠标与键盘事件常用操作方法示例
2018/08/13 Python
Python3爬楼梯算法示例
2019/03/04 Python
django 使用 PIL 压缩图片的例子
2019/08/16 Python
使用Pytorch来拟合函数方式
2020/01/14 Python
在Python 的线程中运行协程的方法
2020/02/24 Python
如何基于Python Matplotlib实现网格动画
2020/07/20 Python
通过实例了解Python异常处理机制底层实现
2020/07/23 Python
Tiqets英国:智能手机上的文化和娱乐门票
2019/07/10 全球购物
恶意软件的定义
2014/11/12 面试题
中队活动总结
2014/08/27 职场文书
学校四风对照检查材料
2014/08/28 职场文书
违反交通法规检讨书
2014/09/10 职场文书
乡镇团委工作总结2015
2015/05/26 职场文书
MySQL 分页查询的优化技巧
2021/05/12 MySQL