ES6解构赋值实例详解


Posted in Javascript onOctober 31, 2017

本文实例讲述了ES6解构赋值。分享给大家供大家参考,具体如下:

基本用法

let [x, y, ...z] = ['a']
//"a", undefined, []

1.等号右边如果不是数组,将会报错(不是可遍历结构)
2.解构赋值 var, let, const命令声明均适用
3.set结构也可解构赋值(具有Iterator接口,可采用数组形式结构赋值)

set解构:任何类型的单个值的集合

let [x, y, z] = new Set(["a", "b", "c"])
x //"a"

默认值

1.数组成员的值不严格等于undefined,默认值不生效(null的话相应值依然为null)

[x=1, y=2, z=3, o=4] = ['a', , undefined, null]
//"a", 2, 3, null

2.如果默认值是表达式,表达式惰性求值,只有在用到的时候才会去执行

3.默认值可以引用结构赋值的其他变量,但该变量必须已声明

对象结构赋值

1.数组按次序排列,对象变量必须与属性同名

var {bar, foo, baz: loc} = {foo: 'aaa', baz: 'bbb'}
bar //undefined
foo //"aaa"
loc //"bbb"
baz //ReferenceError: baz is not defined

2.变量以前声明过,使用let赋值会报错

3.可用于嵌套结构的对象

var node = {
  loc: {
    start: {
      line: 1,
      column: 5
    }
  }
}
var {loc:{start:{line}}} = node
line //1
loc //ReferenceError: loc is not defined
start //ReferenceError: start is not defined

line是变量,loc,start都是模式

4.对象结构可以指定默认值

(生效条件是对象属性值严格等于undefined,null不会生效,解构失败值为undefined)

5.解构模式是嵌套对象,且子对象父属性不存在,报错

6.已声明的变量解构赋值

var x;
{x}={x:1} //SyntaxError: Unexpected token =
({x}={x:1}) //正确

js会将{x}理解成代码块,不将大括号写在行首即可

7.可以将现有对象的方法赋值到某个变量

let { sin, cos, log } = Math(Math对象的名为sin的方法直接赋值给sin变量)

字符串解构赋值

const [a,b] = 'hello' a//h
let {length:len} = 'hello' len//5(字符串本身包含length属性)

数值&布尔值

解构赋值规则:

① 只要等号右边不是对象先将其转化为对象,
② undefined和null无法转换为对象,报错

let a = true
{b} = {a}
//Object {a: true}

函数参数解构

[[1,2],[3,4]].map((a,b)=>a+b) //[3,7]
function({x=0,y=0}={}){
  return [x,y]
}

undefined会触发函数参数默认值

圆括号问题

1.变量声明语句中,模式不能带有圆括号 let {x:(c)} = {}
2.函数参数中,模式不能带有圆括号(函数参数也属于变量声明)
3.整个模式或嵌套模式中的一层,不可放入圆括号

赋值语句的非模式部分可使用

用途

1.[x, y] = [y, x]
2.函数返回的多个值分别赋值
3.函数参数与变量名对应
4.提取json数据(ajax请求返回数据处理中可用到)

({
  needServicePwd: this.needServicePwd,
  needImgCode: this.needImgCode,
  needSmsCode: this.needSmsCode
} = data)

5.函数参数的默认值,避免在函数内写var foo = config.foo || ”

6.遍历Map结构

var map = new Map();
map.set('first', 'hello');
map.set('second', 'world');
for (let [key, value] of map) {
  console.log(key + " is " + value);
}

7.引用模块的指定方法

const { SourceMapConsumer, SourceNode } = require("source-map");

更多相关内容可查看本站专题:《ECMAScript6(ES6)入门教程》、《JavaScript数组操作技巧总结》、《JavaScript字符与字符串操作技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript错误与调试技巧总结》及《javascript面向对象入门教程》

希望本文所述对大家基于ECMAScript的程序设计有所帮助。

Javascript 相关文章推荐
jQuery最佳实践完整篇
Aug 20 Javascript
jQuery height()、innerHeight()、outerHeight()函数的区别详解
May 23 Javascript
jQuery前端开发35个小技巧
May 24 Javascript
JS清除字符串中重复值的实现方法
Aug 03 Javascript
利用jQuery插件imgAreaSelect实现图片上传裁剪(同步显示图像位置信息)
Dec 02 Javascript
详解vue中computed 和 watch的异同
Jun 30 Javascript
AngularJS 实现点击按钮获取验证码功能实例代码
Jul 13 Javascript
JS实现简单的浮动碰撞效果示例
Dec 28 Javascript
JS实现的碰撞检测与周期移动完整示例
Sep 02 Javascript
浅谈Layui的eleTree树式选择器使用方法
Sep 25 Javascript
微信小程序swiper左右扩展各显示一半代码实例
Dec 05 Javascript
jQuery冲突问题解决方法
Jan 19 jQuery
js 获取json数组里面数组的长度实例
Oct 31 #Javascript
jQuery读取本地的json文件(实例讲解)
Oct 31 #jQuery
canvas绘制爱心的几种方法总结(推荐)
Oct 31 #Javascript
ES6扩展运算符用法实例分析
Oct 31 #Javascript
JavaScript中正则表达式使数字、中文或指定字符高亮显示
Oct 31 #Javascript
JavaScript实现QQ列表展开收缩扩展功能
Oct 30 #Javascript
帝国cms首页列表页实现点赞功能
Oct 30 #Javascript
You might like
WIN98下Apache1.3.14+PHP4.0.4的安装
2006/10/09 PHP
ThinkPHP开发--使用七牛云储存
2017/09/14 PHP
jQuery MD5加密实现代码
2010/03/15 Javascript
详解强大的jQuery选择器之基本选择器、层次选择器
2012/02/07 Javascript
JQuery中根据属性或属性值获得元素(6种情况获取方法)
2013/01/17 Javascript
JS中批量给元素绑定事件过程中的相关问题使用闭包解决
2013/04/15 Javascript
JS 日期比较大小的简单实例
2014/01/13 Javascript
教你如何自定义百度分享插件以及bshare分享插件的分享按钮
2014/06/20 Javascript
实例代码详解javascript实现窗口抖动及qq窗口抖动
2016/01/04 Javascript
从零开始学习Node.js系列教程四:多页面实现数学运算的client端和server端示例
2017/04/13 Javascript
Vue.js中兄弟组件之间互相传值实例
2017/06/01 Javascript
Nodejs 和Session 原理及实战技巧小结
2017/08/25 NodeJs
mint-ui的search组件在键盘显示搜索按钮的实现方法
2017/10/27 Javascript
Vue唯一可以更改vuex实例中state数据状态的属性对象Mutation的讲解
2019/01/18 Javascript
浅谈vue加载优化策略
2019/03/19 Javascript
vue-cli3中vue.config.js配置教程详解
2019/05/29 Javascript
浅谈JS中几种轻松处理'this'指向方式
2019/09/16 Javascript
layer扩展打开/关闭动画的方法
2019/09/23 Javascript
javascript 数组(list)添加/删除的实现
2020/12/17 Javascript
[04:12]第二届DOTA2亚洲邀请赛选手传记-Newbee.Sccc
2017/04/03 DOTA
让python在hadoop上跑起来
2016/01/27 Python
python+opencv轮廓检测代码解析
2018/01/05 Python
对Python 多线程统计所有csv文件的行数方法详解
2019/02/12 Python
Python中新式类与经典类的区别详析
2019/07/10 Python
Python作用域与名字空间原理详解
2020/03/21 Python
使用OpenCV获取图像某点的颜色值,并设置某点的颜色
2020/06/02 Python
20行Python代码实现一款永久免费PDF编辑工具的实现
2020/08/27 Python
美国女士泳装店:Swimsuits For All
2017/03/02 全球购物
什么是规则表达式
2012/05/03 面试题
单位门卫岗位职责
2013/12/20 职场文书
主持人婚宴答谢词
2014/01/28 职场文书
会计专业导师推荐信
2014/03/08 职场文书
2015年国庆节演讲稿范文
2015/07/30 职场文书
创业计划书之美容店
2019/09/16 职场文书
python3使用diagrams绘制架构图的步骤
2021/04/08 Python
Python访问Redis的详细操作
2021/06/26 Python