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 delete 引用类型对象
Nov 01 Javascript
node.js+Ajax实现获取HTTP服务器返回数据
Nov 26 Javascript
浅谈nodeName,nodeValue,nodeType,typeof 的区别
Jan 13 Javascript
JavaScript File分段上传
Mar 10 Javascript
js实现文字超出部分用省略号代替实例代码
Sep 01 Javascript
scroll事件实现监控滚动条并分页显示(zepto.js)
Dec 18 Javascript
JS中闭包的经典用法小结(2则示例)
Dec 28 Javascript
Angular2的管道Pipe的使用方法
Nov 07 Javascript
jQuery实现仿京东防抖动菜单效果示例
Jul 06 jQuery
浅谈express.js框架中间件(middleware)
Apr 07 Javascript
JavaScript 面向对象程序设计详解【类的创建、实例对象、构造函数、原型等】
May 12 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生成静态页面详解
2006/11/19 PHP
Yii2中OAuth扩展及QQ互联登录实现方法
2016/05/16 PHP
JQuery 风格的HTML文本转义
2009/07/01 Javascript
同一个表单 根据要求递交到不同页面的实现方法小结
2009/08/05 Javascript
奉献给JavaScript初学者的编写开发的七个细节
2011/01/11 Javascript
多个js与css文件的合并方法详细说明
2012/12/26 Javascript
Extjs407 getValue()和getRawValue()区别介绍
2013/05/21 Javascript
javascript搜索框点击文字消失失焦时文本出现
2014/09/18 Javascript
JavaScript的9种继承实现方式归纳
2015/05/18 Javascript
微信企业号开发之微信考勤Cookies的使用
2015/09/11 Javascript
基于javascript实现彩票随机数生成(简单版)
2020/04/17 Javascript
Angular2 (RC4) 路由与导航详解
2016/09/21 Javascript
html5+CSS 实现禁止IOS长按复制粘贴功能
2016/12/28 Javascript
jQuery源码分析之sizzle选择器详解
2017/02/13 Javascript
Express + Session 实现登录验证功能
2017/09/08 Javascript
javascript函数的节流[throttle]与防抖[debounce]
2017/11/15 Javascript
前端js中的事件循环eventloop机制详解
2019/05/15 Javascript
JS可断点续传文件上传实现代码解析
2020/07/30 Javascript
vue 封装面包屑组件教程
2020/11/16 Javascript
python中zip和unzip数据的方法
2015/05/27 Python
Python的组合模式与责任链模式编程示例
2016/02/02 Python
对python .txt文件读取及数据处理方法总结
2018/04/23 Python
Python对接六大主流数据库(只需三步)
2019/07/31 Python
Tensorflow中tf.ConfigProto()的用法详解
2020/02/06 Python
python生成大写32位uuid代码
2020/03/03 Python
Python 实现自动登录+点击+滑动验证功能
2020/06/10 Python
python Zmail模块简介与使用示例
2020/12/19 Python
python接口自动化框架实战
2020/12/23 Python
Python页面加载的等待方式总结
2021/02/28 Python
HTML5 通过Vedio标签实现视频循环播放的示例代码
2020/08/05 HTML / CSS
员工培训心得体会
2013/12/30 职场文书
总会计师岗位职责
2014/02/19 职场文书
客户经理岗位职责大全
2015/04/09 职场文书
电影雨中的树观后感
2015/06/15 职场文书
攻略丨滑雪究竟该选哪款对讲机?
2022/02/18 无线电
TV动画《史上最强大魔王转生为村民A》番宣CM公布
2022/04/01 日漫