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 相关文章推荐
[原创]保存的js无法执行的解决办法
Feb 25 Javascript
Mootools 1.2教程(3) 数组使用简介
Sep 14 Javascript
ImageZoom 图片放大镜效果(多功能扩展篇)
Apr 14 Javascript
js、jquery图片动画、动态切换示例代码
Jun 03 Javascript
jQuery删除一个元素后淡出效果展示删除过程的方法
Mar 18 Javascript
基于Flowplayer打造一款免费的WEB视频播放器附源码
Sep 06 Javascript
node网页分段渲染详解
Sep 05 Javascript
jquery中$.fn和图片滚动效果实现的必备知识总结
Apr 21 jQuery
CheckBox多选取值及判断CheckBox选中是否为空的实例
Oct 31 Javascript
Angular实现较为复杂的表格过滤,删除功能示例
Dec 23 Javascript
9种方法优化jQuery代码详解
Feb 04 jQuery
整理 node-sass 安装失败的原因及解决办法(小结)
Feb 19 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创建动态图像
2006/10/09 PHP
php上传中文文件名乱码问题处理方案
2015/02/03 PHP
Zend Framework分发器用法示例
2016/12/11 PHP
基于JQuery的浮动DIV显示提示信息并自动隐藏
2011/02/11 Javascript
高效的获取当前元素是父元素的第几个子元素
2013/10/15 Javascript
JavaScript排序算法之希尔排序的2个实例
2014/04/04 Javascript
JavaScript利用正则表达式去除日期中的-
2014/06/09 Javascript
实例解析jQuery插件EasyUI最常用的表单验证规则
2015/11/29 Javascript
jQuery+CSS3实现仿花瓣网固定顶部位置带悬浮效果的导航菜单
2016/09/21 Javascript
JavaScript数组去重的几种方法效率测试
2016/10/23 Javascript
JavaScript严格模式详解
2017/01/16 Javascript
Nodejs读取文件时相对路径的正确写法(使用fs模块)
2017/04/27 NodeJs
微信小程序wx.previewImage预览图片实例详解
2017/12/07 Javascript
微信小程序数字滚动插件使用详解
2018/02/02 Javascript
angular2 NgModel模块的具体使用方法
2019/04/10 Javascript
详解微信小程序开发之formId使用(模板消息)
2019/08/27 Javascript
详解Python中的join()函数的用法
2015/04/07 Python
python查看FTP是否能连接成功的方法
2015/07/30 Python
Python如何实现文本转语音
2016/08/08 Python
Python 搭建Web站点之Web服务器网关接口
2016/11/06 Python
python获取文件路径、文件名、后缀名的实例
2018/04/23 Python
Python日期时间模块datetime详解与Python 日期时间的比较,计算实例代码
2018/09/14 Python
python覆盖写入,追加写入的实例
2019/06/26 Python
Python PIL读取的图像发生自动旋转的实现方法
2019/07/05 Python
在Python中append以及extend返回None的例子
2019/07/20 Python
python 正则表达式参数替换实例详解
2020/01/17 Python
HTML5 Canvas绘制圆点虚线实例
2015/01/01 HTML / CSS
法学专业毕业生自荐信范文
2013/12/18 职场文书
施工资料员岗位职责
2014/01/06 职场文书
公司职员入党自传书
2015/06/26 职场文书
男生贾里读书笔记
2015/06/30 职场文书
幼儿园奖惩制度范本
2015/08/05 职场文书
2016年暑假家长对孩子评语
2015/12/01 职场文书
Nginx+SpringBoot实现负载均衡的示例
2021/03/31 Servers
Mysql查询时间区间日期列表,不会由于数据表数据影响
2022/04/19 MySQL