超级厉害的JavaScript —— ECMAScript 6 标准(3) —— 解构赋值
来源:互联网 发布:宝鸡文理学院网络课程 编辑:程序博客网 时间:2024/05/16 06:59
什么是解构赋值
匹配指定的模式,从数组和对象中提取值(解构),并对变量进行赋值(赋值)。
数组模式
按照对应的顺序位置解构赋值。
let arr = [1,2,3,4,5];let [a,b,c,d] = arr;//a=1,b=2,c=3,d=4
数组嵌套匹配
可以匹配嵌套的数组模式进行解构赋值。
let arr = [1,[2,3],4,5];let [a,b,c,d] = arr;//a=1,b=[2,3],c=4,d=5 没有匹配元素数组的模式,不解构元素数组,并将元素数组直接赋值let [e,[f,g],h] = arr;//e=1,f=2,g=3,h=4 匹配了数组内元素数组的模式,就会将元素数组的值进行解构
默认值
解构赋值允许指定默认值。
let arr = [1,2];let [a,b = 4,c = 3] = arr;//a=1,b=2,c=3
内部使用严格相等运算符(===)判断一个位置是否的等于undefined
。
let arr = [1,undefined,null];let [a,b = 2,c = 3] = arr;//a=1,b=2,c=null
默认值如果是一个表达式,表达式的求值是惰性求值得,即用到的时候才会求值。
function a(){ console.log("aaa"); return "a"}function b(){ console.log("bbb"); return "b"}let [x = a(),y = b()] = [1];//因为 x 能取值,所以 a 不会执行console.log(x,y);//控制台输出//bbb//1,b
默认值可以引用解构赋值的其他变量,但该变量必须已经声明
let [x = 1 , y = x] = []; //x = y = 1let [x = 1 , y = x] = [2]; //x = y = 2let [x = 1 , y = x] = [1 , 2]; //x = 1 ; y = 2let [x = y , y = 1] = []; //ReferenceError
对象模式
按照对应的属性名进行解构赋值。
let { a : a , b : bs} = { a : 1 , b : 2};//a = 1 , bs = 2
如果变量名与属性名相同可以使用简写形式
let { a , b} = { a : 1 , b : 2};//a = 1 , b = 2
也就是说对象解构赋值的模式是{模式 : 变量}
,属性名需要与模式同名,才会把值赋给变量。
默认值
//普通写法let {a : b = 1,x : y = 2 , z} = { a : 3 };//b = 3 ; y = 2 ; z = undefined
这里a
和x
都是模式,b
和y
都是变量;模式x
找不到对应的属性,所以变量y
使用了默认值。而默认的默认值是undefined
。
也就是说,对不匹配的变量再解构会报错
let {a : {b}} = {};//报错
默认值可以使用简写模式,此时模式和变量同名。
//简写模式let {a = 1,x = 2} = { a : 3 };//a = 3 ; x = 2 ;
由于数组的本质是特殊的对象,因此可以对数组进行对象属性的解构,其中模式用数字匹配。
字符串、布尔值、数值的解构赋值
对字符串进行解构是会将字符串转化为类似数组的解构;
布尔值和数值则会先转为对象
0 0
- 超级厉害的JavaScript —— ECMAScript 6 标准(3) —— 解构赋值
- 超级厉害的JavaScript —— ECMAScript 6 标准(1) —— 简介与部署
- 超级厉害的JavaScript —— ECMAScript 6 标准(2) —— let 和 const
- 超级厉害的JavaScript —— ECMAScript 6 标准(4) —— Symbol
- 超级厉害的JavaScript —— ECMAScript 6 标准(11) —— Decorator
- 超级厉害的JavaScript —— ECMAScript 6 标准(10) —— Class
- 超级厉害的JavaScript —— ECMAScript 6 标准(7) —— Generator 函数
- 超级厉害的JavaScript —— ECMAScript 6 标准(8) —— Promise对象
- 超级厉害的JavaScript —— ECMAScript 6 标准(9) —— Async函数
- 超级厉害的JavaScript —— ECMAScript 6 标准(14) —— Module
- 超级厉害的JavaScript —— ECMAScript 6 标准(5) —— Set 和 Map 数据结构
- 分针网——每日分享:ECMAScript 6之变量的解构赋值
- ES6 —(解构赋值)
- ECMAScript 6(4)变量的解构赋值
- ECMAScript 6 入门学习(2.变量的解构赋值)
- ECMAScript 6之变量的解构赋值
- ES6——Day3(字符串的解构赋值+函数参数解构赋值)
- ES6—解构赋值的用途
- Java泛型
- laravel 打印sql
- Socket学习 - 从这个角度学http协议就很简单了
- 说说遇到的一个问题
- win10开启telnet服务
- 超级厉害的JavaScript —— ECMAScript 6 标准(3) —— 解构赋值
- Android微信抢红包功能的实现
- 4*4数组逆时针旋转90度
- 面试--排序(75)
- SpringMVC介绍之Validation
- dump_stack内核调试
- 细聊 Cocoapods 与 Xcode 工程配置
- Linux目录管理
- S2 行转列