es6 快速入門 系列 —— 解構

其餘章節請看:javascript

es6 快速入門 系列html

解構

咱們常常使用數組或對象存儲數據,而後從中提取出相關數據信息java

試圖解決的問題

之前開發者爲了從對象或數組中提取出特定數據並賦值給變量,編寫了不少重複的代碼,就像這樣:es6

function demo1(obj){
    let key1 = obj.key1
    let key2 = obj.key2
    let key3 = obj.key3
    let key4 = obj.key4
    
    // 使用key1,key2,key3,key4變量,作進一步操做
}

demo1({
    key1: 'value1',
    key2: 'value2',
    key3: 'value3',
    key4: 'value4'
})

解決的方法

es6引入新特性:解構。來解決上面的問題,請看下面:數組

function demo1({key1, key2, key3, key4}){
    console.log(key2) // value2
    
    // 使用key1,key2,key3,key4變量,作進一步操做
}

demo1({
    key1: 'value1',
    key2: 'value2',
    key3: 'value3',
    key4: 'value4'
})

能夠把解構簡單理解成賦值rest

更詳細的介紹請看下面補充部分code

補充

對象解構

對象解構的語法:在賦值操做符左邊放置一個對象字面量htm

聲明變量時使用解構
let obj = {
    key1: 'value1',
    key2: 'value2'
}
let {key1, key2} = obj

console.log(key1) // value1

不要忘記初始化對象

// 語法錯誤
var {key1, key2}

// 語法錯誤
let {key1, key2}
變量賦值時使用解構
let obj = {
    key1: 'value1',
    key2: 'value2'
}
let key1 = '11';
// 必定要用小括號包裹賦值語句。不然js引擎將{}是爲代碼塊,而代碼塊不容許出如今賦值語句的左側
({key1} = obj)

console.log(key1) // value1
解構時的默認值
let obj = {
    key1: 'value1',
    key2: 'value2',
    key5: undefined
}
let {key1, key2, key3, key4 = 'value4', key5 = 'value5'} = obj

console.log(key2) // value2
console.log(key3) // undefined 該變量名在obj中不存在,則賦值undefined
console.log(key4) // value4 對應的屬性不存在,使用默認值
console.log(key5) // value5 對應屬性值爲undefined,使用默認值
非同名變量賦值
let obj = {
    key1: 'value1'
}
let {key1: v1, key2: v2 = 'value5'} = obj

console.log(v1) // value1
console.log(v2) // value5
嵌套對象的解構
let obj = {
    loc: {
        key1: 'value1',
    }
}
let {loc: {key1, key2, key3 = 'value3'}} = obj;

console.log(key1) // value1
console.log(key2) // undefined
console.log(key3) // value3

數組解構

數組解構語法:與對象解構語法相比要簡單多了,使用的是數組字面量blog

聲明變量時使用解構
let arr = ['value1', 'value2', 'value3', 'value4', 'value5']
let [,,key3,key4,key5] = arr

console.log(key3) // value3 逗號是佔位符
console.log(key5) // value5

不要忘記初始化

// 語法錯誤
let [,,key3,key4,key5]
變量賦值時使用解構

不須要用小括號包裹表達式,這一點與對象解構不一樣

let arr = ['value1', 'value2']
let key1, key2;
[key1, key2] = arr
console.log(key1) // value1

數組解構有一個獨特用法:交換兩個變量的值

let key1 = 'value1';
let key2 = 'value2';
[key1, key2] = [key2, key1];

console.log(key1) // value2
console.log(key2) // value1
解構時的默認值
let arr = ['value1']
let [key1, key2 = 'value2'] = arr

console.log(key2) // value2
嵌套數組的解構
let arr = ['value1', ['value2', 'value3'], 'value4']
let [key1,[key2],key4] = arr

console.log(key2) // value2
console.log(key4) // value4
不定元素

前面咱們介紹了不定參數,而在數組解構語法中有一個與之相似的概念:不定元素。在數組中,能夠經過三個點(...)的語法將數組中的其他元素賦值給一個特定的變量,就像這樣:

let arr = ['value1', 'value2', 'value3', 'value4']
let [key1, ...restKeys] = arr

console.log(key1) // value1
console.log(restKeys.length) // 3
console.log(restKeys[0]) // value2

:與不定參數同樣,不定元素也必須是最後一個

可使用不定元素克隆數組

let arr = ['value1', 'value2']
let [...copy] = arr

console.log(Array.isArray(copy)) // true
console.log(copy[1]) // value2

解構參數

解構參數必須傳值

function demo(key1, {key2, key3}){
    console.log(key2) // value2
}
// 正確
demo('value1', {key2: 'value2'})
// 報錯
demo('value1')

當調用 demo('value1') 時,js引擎實際上作了這些事:

function demo(key1, options){
    let {key2, key3} = options
}

若是須要讓解構參數可選,必須爲其提供默認值

function demo(key1, {key2, key3} = {}){
    console.log(key2) // undefined
}

// 正確
demo('value1')

下面這種寫法,讓解構參數支持可選,而且能提供默認值:

function demo(key1, {key2 = 'value2', key3 = 'value3'} = {}){
    console.log(key2)
}

demo('value1') // value2 解構參數支持可選
demo('value1', {}) // value2
demo('value1', {key2: 'value20'}) // value20
demo('value1', {key3: 'value30'}) // value2

其餘章節請看:

es6 快速入門 系列

相關文章
相關標籤/搜索