您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(guān)ES6中數(shù)組的解構(gòu)賦值如何使用的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考。一起跟隨小編過來看看吧。
數(shù)組的解構(gòu)賦值
基本用法
ES6 允許按照一定模式,從數(shù)組和對象中提取值,對變量進行賦值,這被稱為結(jié)構(gòu)。
在ES6之前想要為變量賦值,只能指定其值,如下:
let a = 1; let b = 2
而在ES6中可以寫成這樣,如下:
let [a,b] = [1,2] // a = 1, b = 2
值得注意的是,等式兩邊的值要對等,這樣左邊的變量才會被賦上右邊對應的值,如果不對等左邊的值將會出現(xiàn)undefined,如下寫法:
let [foo,[[bar],baz]] = [1,[[2],3]] foo // 1 bar // 2 baz // 3 注意:只有左右兩邊的 格式一定要對等,數(shù)量可以不對等。 let [a,b,c] = [1,2] a = 1, b = 2, c = undefined let [a,,c] = [1,2,3] a = 1, c = 3 let [a, ...b] = [1,2,3] a = 1, b = [2,3] let [a] = [] let [b,a] = [1] a = undefined
還有一種情況,等號左邊為數(shù)組,但是等號右邊為其他值,將會報錯。如下:
let [a] = 1; let [a] = false; let [a] = NaN; let [a] = undefined; let [a] = null; let [a] = {}; 以上都會報錯
但是如果左邊為數(shù)組,右邊為字符串,將會取字符串的第一個下標的值
let [a] = '121321' a = '1' let [a] = 'adgasg' a = 'a'
對于Set結(jié)構(gòu),同樣可以使用數(shù)組的解構(gòu)賦值。
let [x,y,z] = new Set([1,2,3]) x = 1, y = 2, z = 3
解構(gòu)賦值允許指定默認值
let [a = 3] = [] // a:3 let [a = 3,b] = [,4] // a:3 b:4 let [a = 3,b] = [5,4] // a:5 b:4
特殊
let [a = 3] = [undefined] // a:3 let [a = 3] = [null] // a:null
Tips: 在es6中使用嚴格相等運算符,在結(jié)構(gòu)賦值中如果需要默認值生效,則應對等的值為undefined的時候才會采用默認值,否則還是使用賦值。上面中null 不嚴格等于undefined++
如果默認值的賦值為一個表達式,只有當?shù)忍栍疫叺馁x值沒有值為undefined的時候,才會取表達式中的值,如下:
function demo(){ console.log('demo') } let [a = demo()] = [] // a: demo let [a = demo()] = [1] // a : 1
與數(shù)組的不同點是,數(shù)組的元素必須和賦值的元素要位置一致才能正確的賦值,而對象的解構(gòu)賦值則是等號兩邊的變量和屬性同名即可取到正確的值。否則值為 undefined
let {a,b} = {a:'23',b:'3'} let {a,b} = {b:'3',a:'23'} // 上面兩個的值 都是 a: 23 b: 3 let {a,b} = {a:'3',c:'d'} //a: 3 b: undefined
對象的解構(gòu)賦值還有將某一個現(xiàn)有對象的方法賦值到一個新的變量,如下:
let {sin,cos} = Math // Math 中的sin cos 方法將賦值給變量 sin cos let {log} = console // log(2) === console.log(2)
如果等號左邊的變量名不能和等號右邊的對象的屬性名一致,則必須寫成如下格式:
let {a:b} = {a:'ss'} // b:ss //a是屬性名,b才是實際賦值的變量名
對象的解構(gòu)賦值一樣是可以嵌套解構(gòu)的,如下:
第一種: let obj = { p:[ 'Hello', {y:'world'} ] } let {p:[x,{y}]} = obj // x: Hello, y: world 這邊的p只是屬性不是變量,如果p想賦值可以寫成: let {p,:[x,{y}]} = obj 第二種: const a = { loc: { t :1, b :{ c:1, d:2 } } } let {loc:{t,b:{c,d}}} = a 或者 let {loc,loc:{t,b,b:{c,d}}} = a
let o = {}, arr = [] ({foo:o.prop,bar: arr[0]} = {foo:123,bar:true}) //o: 123, arr = [true]
如果解構(gòu)模式 是嵌套的對象,如果子對象所在的父屬性不存在,則會報錯,如下:
let {foo:{bar}} = {baz:'baz'} //報錯
let {x = 3} = {} // x: 3 let {x,y = 5} = {x : 1} // x: 1, y: 5 let {x: y = 5} = {} // y = 5 let {x: y = 5} = {x : 4} // y = 4 let {x: y = 'hhhh'} = {} //y = 'hhhh' Tips:以上左邊 x為屬性名,y為變量 let {x = 5} = {x: undefined} // x: 5 let {x = 4} = {x: null} // x: null 同數(shù)組一樣遵循 嚴格等于 只有右邊為undefined的時候默認值才會生效
注意點:
1)不能將已聲明的變量用于解構(gòu)賦值,因為已經(jīng)是一個代碼塊。
如果賦值的對象是數(shù)組,字符串將被分割為數(shù)組的格式,一一對應賦值
let [a,b] = 'ha' // a = h , b = a 同時可以獲得字符串的長度: let {length:len} = '12121' // len = 5
如果等號右邊是數(shù)字或者布爾值 則轉(zhuǎn)換成對象或者說,除了是數(shù)組和對象,其他值都將轉(zhuǎn)換成對象,null 和 undefined 除外。如下:
let {t:s} = 123 let {t: s} = true
function add([x,y]){ return x+y } add([3,5]) // 8 [[3,5],[6,7]].map(([a,b]) => a + b) //8 , 13 function m({x=3, y=4} = {}){ return [x,y] } m({x:33,y:8}) // [33,8] m({x:32}) // [32,4] m({}) // [3,4] m() // [3,4] function m({x,y} = {x=0,y=0}){ return [x,y] } m({x:33,y:8}) // [33,8] // 代替右邊的 x:0, y:0 所以是傳值 33 8 m({x:32}) // [32,undefined] //因為傳值替代右邊的賦值,但是只有x沒有y //所以y是取 左邊y的默認值,因為你沒有賦值 為undefined m({}) // [undefined,undefined] // 取左邊x,y的默認值,因為沒有賦值 為undefined m() // [0,0] // 沒有傳值,使用本身的賦值 都是0
感謝各位的閱讀!關(guān)于ES6中數(shù)組的解構(gòu)賦值如何使用就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。