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 easyui combox一些实用的小方法
Dec 25 Javascript
javascript中验证大写字母、数字和中文
Jan 15 Javascript
AngularJS入门教程(二):AngularJS模板
Dec 06 Javascript
jquery增加和删除元素的方法
Jan 14 Javascript
JS实现至少包含字母、大小写数字、字符的密码等级的两种方法
Feb 03 Javascript
javascript实现起伏的水波背景效果
May 16 Javascript
详解Angular中的自定义服务Service、Provider以及Factory
Apr 22 Javascript
EasyUI的TreeGrid的过滤功能的解决思路
Aug 08 Javascript
JQuery animate动画应用示例
May 14 jQuery
JS代码简洁方式之函数方法详解
Jul 28 Javascript
Vue 使用typescript如何优雅的调用swagger API
Sep 01 Javascript
OpenLayers3实现测量功能
Sep 25 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中preg_match函数正则匹配的字符串长度问题
2015/05/27 PHP
js基于qrcode.js生成二维码的方法【附demo插件源码下载】
2016/12/28 PHP
yii2局部关闭(开启)csrf的验证的实例代码
2017/07/10 PHP
yii2.0整合阿里云oss的示例代码
2017/09/19 PHP
jquery text(),val(),html()方法区别总结
2013/11/04 Javascript
深入JavaScript高级程序设计之对象、数组(栈方法,队列方法,重排序方法,迭代方法)
2015/12/01 Javascript
jQuery同步提交示例代码
2015/12/12 Javascript
JavaScript必知必会(十) call apply bind的用法说明
2016/06/08 Javascript
详细谈谈AngularJS的子级作用域问题
2016/09/05 Javascript
微信小程序页面传值实例分析
2017/04/19 Javascript
详解Layer弹出层样式
2017/08/21 Javascript
Vue中组件之间数据的传递的示例代码
2017/09/08 Javascript
新手vue构建单页面应用实例代码
2017/09/18 Javascript
vue中配置mint-ui报css错误问题的解决方法
2017/10/11 Javascript
iview在vue-cli3如何按需加载的方法
2018/10/31 Javascript
原生js实现针对Dom节点的CRUD操作示例
2019/08/26 Javascript
js判断复选框是否选中的方法示例【基于jQuery】
2019/10/10 jQuery
微信小程序scroll-view隐藏滚动条的方法详解
2020/03/25 Javascript
jQuery实现图片切换效果
2020/10/19 jQuery
基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件功能
2021/02/23 Vue.js
举例详解Python中threading模块的几个常用方法
2015/06/18 Python
Python使用tablib生成excel文件的简单实现方法
2016/03/16 Python
Python内置的HTTP协议服务器SimpleHTTPServer使用指南
2016/03/30 Python
selenium+python实现自动化登录的方法
2018/09/04 Python
Python快速转换numpy数组中Nan和Inf的方法实例说明
2019/02/21 Python
Django media static外部访问Django中的图片设置教程
2020/04/07 Python
浅谈keras中的batch_dot,dot方法和TensorFlow的matmul
2020/06/18 Python
CSS3动画之利用requestAnimationFrame触发重新播放功能
2019/09/11 HTML / CSS
几个CSS3的flex弹性盒模型布局的简单例子演示
2016/05/12 HTML / CSS
本科生职业生涯规划书范文
2014/01/21 职场文书
办公室主任职责范本
2014/03/07 职场文书
白岩松演讲
2014/05/21 职场文书
物理学专业自荐信
2014/06/11 职场文书
小学优秀教师事迹材料
2014/12/16 职场文书
长城导游词400字
2015/01/30 职场文书
校车安全管理责任书
2015/05/11 职场文书