1. ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构 。
let [a,b,c] = [1, 2 , 3]
2. 如果等号的右边不是数组(或者严格地说,不是可遍历的结构,参见《Iterator》一章),那么将会报错。如下例 :
let [foo] =1
let [foo] = false
let [foo] = NaN
let [foo] = undefined
let [foo] = null
let [foo] ={}
3 .解构赋值允许指定默认值。
let [foo = 123] =[ ] // foo=123
注意,ES6 内部使用严格相等运算符(===
),判断一个位置是否有值。所以,只有当一个数组成员严格等于undefined
,默认值才会生效。
let [x=1] = [undefined] //x=1
let [x=1] = [null] //x = null
4.对象的解构赋值
let { aoo ,boo } ={aoo:123,boo:456}
// aoo=123, boo=456
说明 :对象的解构与数组有一个重要的不同。数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。
5 . 对象的解构也可以指定默认值。
var {x,y=5}={x:1}
// x=1 y=5
var {x:y=5}={ x:8}
// y=8
说明 : 默认值生效的条件是,对象的属性值严格等于undefined
。
var {x:3}= {x: null}
6 解构赋值的用途 如下例 :
let x=1;let x=2;
[x,y] = [y, x]
1. 上面代码交换变量x
和y
的值,这样的写法不仅简洁,而且易读,语义非常清晰。
2. 提取JSON数据 如:
let jsonData={
"id": 10,
"code": 0,
“returnResult” : [ 10,20 ]
}
let { id, code,returnResult: arr }= jsonData
console.log( id, code, arr) //10 0 [10, 20]
3 .输入模块的指定方法
1 .加载模块时,往往需要指定输入哪些方法。解构赋值使得输入语句非常清晰。
const { SourceMapConsumer, SourceNode } = require( "source-map")
4 .遍历map解构 。
(1)任何部署了 Iterator 接口的对象,都可以用for...of
循环遍历。Map 结构原生支持 Iterator 接口,配合变量的解构赋值,获取键名和键值就非常方便。
const map=new Map()
map.set('first' ,'hello' )
map.set(' second ', 'world')
for( let [ key,value ] of map) {
console.log( key )
}