摘要:數(shù)組的解構(gòu)賦值基本用法允許按照一定模式,從數(shù)組和對(duì)象中提取值,對(duì)變量進(jìn)行賦值,這被稱為結(jié)構(gòu)。如下以上都會(huì)報(bào)錯(cuò)但是如果左邊為數(shù)組,右邊為字符串,將會(huì)取字符串的第一個(gè)下標(biāo)的值對(duì)于結(jié)構(gòu),同樣可以使用數(shù)組的解構(gòu)賦值。
數(shù)組的解構(gòu)賦值 基本用法
ES6 允許按照一定模式,從數(shù)組和對(duì)象中提取值,對(duì)變量進(jìn)行賦值,這被稱為結(jié)構(gòu)。
在ES6之前想要為變量賦值,只能指定其值,如下:
let a = 1; let b = 2
而在ES6中可以寫成這樣,如下:
let [a,b] = [1,2] // a = 1, b = 2
值得注意的是,等式兩邊的值要對(duì)等,這樣左邊的變量才會(huì)被賦上右邊對(duì)應(yīng)的值,如果不對(duì)等左邊的值將會(huì)出現(xiàn)undefined,如下寫法:
let [foo,[[bar],baz]] = [1,[[2],3]] foo // 1 bar // 2 baz // 3 注意:只有左右兩邊的 格式一定要對(duì)等,數(shù)量可以不對(duì)等。 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
還有一種情況,等號(hào)左邊為數(shù)組,但是等號(hào)右邊為其他值,將會(huì)報(bào)錯(cuò)。如下:
let [a] = 1; let [a] = false; let [a] = NaN; let [a] = undefined; let [a] = null; let [a] = {}; 以上都會(huì)報(bào)錯(cuò)
但是如果左邊為數(shù)組,右邊為字符串,將會(huì)取字符串的第一個(gè)下標(biāo)的值
let [a] = "121321" a = "1" let [a] = "adgasg" a = "a"
對(duì)于Set結(jié)構(gòu),同樣可以使用數(shù)組的解構(gòu)賦值。
let [x,y,z] = new Set([1,2,3]) x = 1, y = 2, z = 3默認(rèn)值
解構(gòu)賦值允許指定默認(rèn)值
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中使用嚴(yán)格相等運(yùn)算符,在結(jié)構(gòu)賦值中如果需要默認(rèn)值生效,則應(yīng)對(duì)等的值為undefined的時(shí)候才會(huì)采用默認(rèn)值,否則還是使用賦值。上面中null 不嚴(yán)格等于undefined++
如果默認(rèn)值的賦值為一個(gè)表達(dá)式,只有當(dāng)?shù)忍?hào)右邊的賦值沒有值為undefined的時(shí)候,才會(huì)取表達(dá)式中的值,如下:
function demo(){ console.log("demo") } let [a = demo()] = [] // a: demo let [a = demo()] = [1] // a : 1對(duì)象的解構(gòu)賦值
與數(shù)組的不同點(diǎn)是,數(shù)組的元素必須和賦值的元素要位置一致才能正確的賦值,而對(duì)象的解構(gòu)賦值則是等號(hào)兩邊的變量和屬性同名即可取到正確的值。否則值為 undefined
let {a,b} = {a:"23",b:"3"} let {a,b} = {b:"3",a:"23"} // 上面兩個(gè)的值 都是 a: 23 b: 3 let {a,b} = {a:"3",c:"d"} //a: 3 b: undefined
對(duì)象的解構(gòu)賦值還有將某一個(gè)現(xiàn)有對(duì)象的方法賦值到一個(gè)新的變量,如下:
let {sin,cos} = Math // Math 中的sin cos 方法將賦值給變量 sin cos let {log} = console // log(2) === console.log(2)
如果等號(hào)左邊的變量名不能和等號(hào)右邊的對(duì)象的屬性名一致,則必須寫成如下格式:
let {a:b} = {a:"ss"} // b:ss //a是屬性名,b才是實(shí)際賦值的變量名
對(duì)象的解構(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)模式 是嵌套的對(duì)象,如果子對(duì)象所在的父屬性不存在,則會(huì)報(bào)錯(cuò),如下:
let {foo:{bar}} = {baz:"baz"} //報(bào)錯(cuò)默認(rèn)值
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ù)組一樣遵循 嚴(yán)格等于 只有右邊為undefined的時(shí)候默認(rèn)值才會(huì)生效
1)不能將已聲明的變量用于解構(gòu)賦值,因?yàn)橐呀?jīng)是一個(gè)代碼塊。
字符串的解構(gòu)賦值如果賦值的對(duì)象是數(shù)組,字符串將被分割為數(shù)組的格式,一一對(duì)應(yīng)賦值
let [a,b] = "ha" // a = h , b = a 同時(shí)可以獲得字符串的長(zhǎng)度: let {length:len} = "12121" // len = 5數(shù)值和布爾值的解構(gòu)賦值
如果等號(hào)右邊是數(shù)字或者布爾值 則轉(zhuǎn)換成對(duì)象或者說,除了是數(shù)組和對(duì)象,其他值都將轉(zhuǎn)換成對(duì)象,null 和 undefined 除外。如下:
let {t:s} = 123 let {t: s} = true函數(shù)參數(shù)的解構(gòu)賦值
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] //因?yàn)閭髦堤娲疫叺馁x值,但是只有x沒有y //所以y是取 左邊y的默認(rèn)值,因?yàn)槟銢]有賦值 為undefined m({}) // [undefined,undefined] // 取左邊x,y的默認(rèn)值,因?yàn)闆]有賦值 為undefined m() // [0,0] // 沒有傳值,使用本身的賦值 都是0其他 不能使用圓括號(hào)的情況
變量聲明語句
函數(shù)參數(shù)
賦值語句的模式
可以使用圓括號(hào)的情況賦值語句的非模式部分,可以使用圓括號(hào)
解構(gòu)賦值的用途交換變量的值
從函數(shù)返回多個(gè)值
函數(shù)參數(shù)的定義
提取JOSN數(shù)據(jù)
函數(shù)參數(shù)的默認(rèn)值
遍歷Map結(jié)構(gòu)
輸入模塊的指定方法
歡迎關(guān)注 公眾號(hào)【小夭同學(xué)】
ES6入門系列
ES6入門之let、cont
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/103410.html
摘要:是國(guó)際組織于年月日發(fā)布的第六版,正式名為通常被成為或。二模版字面量提供一種簡(jiǎn)單實(shí)現(xiàn)表達(dá)式嵌套的字符串字面量操作,簡(jiǎn)而言之就是能夠以簡(jiǎn)單的方法實(shí)現(xiàn)字符串拼接操作。 本文同步 帶你入門 JavaScript ES6 (一),轉(zhuǎn)載請(qǐng)注明出處。 ES6: 是 ECMA國(guó)際組織于 2015 年 6 月 17 日發(fā)布的 ECMAScript 第六版,正式名為 ECMAScript 2015,通常被...
摘要:具體的分析暫時(shí)不討論解決的方式很簡(jiǎn)單,把上面的代碼塊變成一段表達(dá)式就小明總結(jié)解構(gòu)賦值是提供一個(gè)十分方便的表達(dá)式。的解構(gòu)賦值小明的對(duì)象賦值這里可以被賦予初始值小明對(duì)象的屬性不存在能夠賦值給多個(gè)變量 對(duì)象解構(gòu)賦值 ES6 允許按照一定模式,從數(shù)組和對(duì)象中提取值,對(duì)變量進(jìn)行賦值,這被稱為解構(gòu)(Destructuring)。 --- 阮一峰《ECMAScript...
摘要:如果所有函數(shù)都是尾調(diào)用,那么完全可以做到每次執(zhí)行時(shí),調(diào)用幀只有一項(xiàng),這將大大節(jié)省內(nèi)存。等同于等同于注意,只有不再用到外層函數(shù)的內(nèi)部變量,內(nèi)層函數(shù)的調(diào)用幀才會(huì)取代外層函數(shù)的調(diào)用幀,否則就無法進(jìn)行尾調(diào)用優(yōu)化。 showImg(https://segmentfault.com/img/bVbrTHp?w=1080&h=1920); 1. 函數(shù)參數(shù)的默認(rèn)值 1.1 用法 在ES6之前是不能為...
摘要:如果所有函數(shù)都是尾調(diào)用,那么完全可以做到每次執(zhí)行時(shí),調(diào)用幀只有一項(xiàng),這將大大節(jié)省內(nèi)存。等同于等同于注意,只有不再用到外層函數(shù)的內(nèi)部變量,內(nèi)層函數(shù)的調(diào)用幀才會(huì)取代外層函數(shù)的調(diào)用幀,否則就無法進(jìn)行尾調(diào)用優(yōu)化。 showImg(https://segmentfault.com/img/bVbrTHp?w=1080&h=1920); 1. 函數(shù)參數(shù)的默認(rèn)值 1.1 用法 在ES6之前是不能為...
摘要:的作用域與命令相同只在聲明所在的塊級(jí)作用域內(nèi)有效。數(shù)值和布爾值的解構(gòu)賦值解構(gòu)賦值時(shí),如果等號(hào)右邊是數(shù)值和布爾值,則會(huì)先轉(zhuǎn)為對(duì)象。上面代碼中,數(shù)值和布爾值的包裝對(duì)象都有屬性,因此變量都能取到值。默認(rèn)值解構(gòu)賦值允許指定默認(rèn)值。 最近正在學(xué)習(xí)ES6,對(duì)于ES6的語法有一些自己的理解, 想寫這篇文章幫助跟我一樣的新手快速入門ES6而不至于連代碼都看不懂. 至于開發(fā)環(huán)境的搭建什么...
閱讀 3441·2023-04-25 23:25
閱讀 2069·2021-11-12 10:36
閱讀 2816·2019-08-30 12:47
閱讀 2037·2019-08-29 18:45
閱讀 435·2019-08-29 17:28
閱讀 1785·2019-08-29 17:15
閱讀 1707·2019-08-29 16:05
閱讀 1405·2019-08-29 14:17