其餘章節請看: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
其餘章節請看: