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 相关文章推荐
javascript 隐藏/显示指定的区域附HTML元素【legend】用法
Mar 05 Javascript
Javascript 闭包引起的IE内存泄露分析
May 23 Javascript
jQuery之选项卡的简单实现
Feb 28 Javascript
JQuery的Ajax中Post方法传递中文出现乱码的解决方法
Oct 21 Javascript
浅谈JavaScript字符串拼接
Jun 25 Javascript
探讨JavaScript中的Rest参数和参数默认值
Jul 29 Javascript
关于JS中的方法是否加括号的问题
Jul 27 Javascript
jQuery读取XML文件的方法示例
Feb 03 Javascript
基于webpack-hot-middleware热加载相关错误的解决方法
Feb 22 Javascript
vue实现学生录入系统之添加删除功能
Jul 11 Javascript
webpack 从指定入口文件中提取公共文件的方法
Nov 13 Javascript
Django+vue跨域问题解决的详细步骤
Jan 20 Javascript
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
PHP 读取文件的正确方法
2009/04/29 PHP
php错误提示failed to open stream: HTTP request failed!的完美解决方法
2011/06/06 PHP
php计算两个日期时间差(返回年、月、日)
2014/06/19 PHP
利用 fsockopen() 函数开放端口扫描器的实例
2017/08/19 PHP
javascript 面向对象思想 附源码
2009/07/07 Javascript
JQuery实现表格中相同单元格合并示例代码
2013/06/26 Javascript
js中widow.open()方法使用详解
2013/07/30 Javascript
js中window.open打开一个新的页面
2014/08/10 Javascript
一个jquery实现的不错的多行文字图片滚动效果
2014/09/28 Javascript
jQuery插件简单实现方法
2015/07/18 Javascript
js图片轮播特效代码分享
2015/09/07 Javascript
Bootstrap3制作搜索框样式的方法
2016/07/11 Javascript
浅谈angular2的http请求返回结果的subcribe注意事项
2017/03/01 Javascript
Node.js对MongoDB数据库实现模糊查询的方法
2017/05/03 Javascript
基于zepto.js实现手机相册功能
2017/07/11 Javascript
详解javascript 正则表达式之分组与前瞻匹配
2018/05/30 Javascript
js canvas实现橡皮擦效果
2018/12/20 Javascript
[02:36]DOTA2英雄基础教程 帕格纳
2014/01/20 DOTA
python中global与nonlocal比较
2014/11/21 Python
基于python select.select模块通信的实例讲解
2017/09/21 Python
python中logging库的使用总结
2017/10/18 Python
基于Python中numpy数组的合并实例讲解
2018/04/04 Python
实例讲解Python中浮点型的基本内容
2019/02/11 Python
使用 Supervisor 监控 Python3 进程方式
2019/12/05 Python
如何使用Python多线程测试并发漏洞
2019/12/18 Python
Ubuntu 20.04安装Pycharm2020.2及锁定到任务栏的问题(小白级操作)
2020/10/29 Python
CSS3之多背景background使用示例
2013/10/18 HTML / CSS
澳大利亚领先的睡衣品牌:Peter Alexander
2016/08/16 全球购物
波兰在线体育用品商店:Hop-Sport.pl
2019/07/23 全球购物
New Balance比利时官方网站:购买鞋子和服装
2021/01/15 全球购物
写clone()方法时,通常都有一行代码,是什么?
2012/10/31 面试题
英语商务邀请函范文
2014/01/16 职场文书
高中生学期学习自我评价
2014/02/24 职场文书
2015学校六五普法工作总结
2015/04/22 职场文书
大学运动会通讯稿
2015/07/18 职场文书
2016年秋季运动会加油稿
2015/12/21 职场文书