亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

ES6入門教程之變量的解構賦值詳解

2019-11-19 11:47:48
字體:
來源:轉載
供稿:網友

前言

我們經常定義許多對象和數組,然后有組織地從中提取相關的信息片段。在ES6中添加了可以簡化這種任務的新特性:解構。解構是一種打破數據結構,將其拆分為更小部分的過程。本文將詳細介紹ES6解構賦值,下面話不多說了,來一起看看詳細的介紹吧

數組的解構賦值

基本用法

ES6 允許按照一定模式,從數組和對象中提取值,對變量進行賦值,這被稱為結構。

在ES6之前想要為變量賦值,只能指定其值,如下:

let a = 1;let b = 2

而在ES6中可以寫成這樣,如下:

let [a,b] = [1,2]// a = 1, b = 2

值得注意的是,等式兩邊的值要對等,這樣左邊的變量才會被賦上右邊對應的值,如果不對等左邊的值將會出現undefined,如下寫法:

let [foo,[[bar],baz]] = [1,[[2],3]]foo // 1bar // 2baz // 3

 

注意:只有左右兩邊的 格式一定要對等,數量可以不對等。

let [a,b,c] = [1,2]a = 1, b = 2, c = undefinedlet [a,,c] = [1,2,3]a = 1, c = 3let [a, ...b] = [1,2,3]a = 1, b = [2,3]let [a] = []let [b,a] = [1]a = undefined

還有一種情況,等號左邊為數組,但是等號右邊為其他值,將會報錯。如下:

let [a] = 1;let [a] = false;let [a] = NaN;let [a] = undefined;let [a] = null;let [a] = {};以上都會報錯

但是如果左邊為數組,右邊為字符串,將會取字符串的第一個下標的值

let [a] = '121321' a = '1'let [a] = 'adgasg' a = 'a'

對于Set結構,同樣可以使用數組的解構賦值。

let [x,y,z] = new Set([1,2,3])x = 1, y = 2, z = 3

默認值

解構賦值允許指定默認值

let [a = 3] = [] // a:3let [a = 3,b] = [,4] // a:3 b:4let [a = 3,b] = [5,4] // a:5 b:4

特殊

let [a = 3] = [undefined] // a:3let [a = 3] = [null] // a:null

Tips: 在es6中使用嚴格相等運算符,在結構賦值中如果需要默認值生效,則應對等的值為undefined的時候才會采用默認值,否則還是使用賦值。上面中null 不嚴格等于undefined++

如果默認值的賦值為一個表達式,只有當等號右邊的賦值沒有值為undefined的時候,才會取表達式中的值,如下:

function demo(){ console.log('demo')}let [a = demo()] = [] // a: demolet [a = demo()] = [1] // a : 1

對象的解構賦值

與數組的不同點是,數組的元素必須和賦值的元素要位置一致才能正確的賦值,而對象的解構賦值則是等號兩邊的變量和屬性同名即可取到正確的值。否則值為 undefined

let {a,b} = {a:'23',b:'3'}let {a,b} = {b:'3',a:'23'}// 上面兩個的值 都是 a: 23 b: 3let {a,b} = {a:'3',c:'d'}//a: 3 b: undefined

對象的解構賦值還有將某一個現有對象的方法賦值到一個新的變量,如下:

let {sin,cos} = Math// Math 中的sin cos 方法將賦值給變量 sin coslet {log} = console// log(2) === console.log(2)

如果等號左邊的變量名不能和等號右邊的對象的屬性名一致,則必須寫成如下格式:

let {a:b} = {a:'ss'} // b:ss//a是屬性名,b才是實際賦值的變量名

對象的解構賦值一樣是可以嵌套解構的,如下:

第一種: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]

如果解構模式 是嵌套的對象,如果子對象所在的父屬性不存在,則會報錯,如下:

let {foo:{bar}} = {baz:'baz'} //報錯

默認值

let {x = 3} = {}// x: 3let {x,y = 5} = {x : 1}// x: 1, y: 5let {x: y = 5} = {}// y = 5let {x: y = 5} = {x : 4}// y = 4let {x: y = 'hhhh'} = {}//y = 'hhhh'Tips:以上左邊 x為屬性名,y為變量let {x = 5} = {x: undefined}// x: 5let {x = 4} = {x: null}// x: null同數組一樣遵循 嚴格等于 只有右邊為undefined的時候默認值才會生效

注意點:

1)不能將已聲明的變量用于解構賦值,因為已經是一個代碼塊。

字符串的解構賦值

如果賦值的對象是數組,字符串將被分割為數組的格式,一一對應賦值

let [a,b] = 'ha'// a = h , b = a同時可以獲得字符串的長度:let {length:len} = '12121'// len = 5

數值和布爾值的解構賦值

如果等號右邊是數字或者布爾值 則轉換成對象或者說,除了是數組和對象,其他值都將轉換成對象,null 和 undefined 除外。如下:

let {t:s} = 123let {t: s} = true

函數參數的解構賦值

function add([x,y]){ return x+y}add([3,5]) // 8[[3,5],[6,7]].map(([a,b]) => a + b)//8 , 13function 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 8m({x:32})   // [32,undefined]//因為傳值替代右邊的賦值,但是只有x沒有y//所以y是取 左邊y的默認值,因為你沒有賦值 為undefinedm({})    // [undefined,undefined] // 取左邊x,y的默認值,因為沒有賦值 為undefinedm()    // [0,0]// 沒有傳值,使用本身的賦值 都是0

其他

不能使用圓括號的情況

  • 變量聲明語句
  • 函數參數
  • 賦值語句的模式

可以使用圓括號的情況

  • 賦值語句的非模式部分,可以使用圓括號

解構賦值的用途

  • 交換變量的值
  • 從函數返回多個值
  • 函數參數的定義
  • 提取JOSN數據
  • 函數參數的默認值
  • 遍歷Map結構
  • 輸入模塊的指定方法

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产成人福利网站| 亚洲综合在线小说| 国产精品三级久久久久久电影| 精品呦交小u女在线| 国产精品久久久久久久久久三级| 欧美性视频在线| 亚洲久久久久久久久久久| 欧美人与性动交| 国产精品免费看久久久香蕉| 136fldh精品导航福利| 欧美老女人bb| 狠狠躁夜夜躁人人躁婷婷91| 久久视频在线直播| 久久天天躁狠狠躁夜夜av| 最近中文字幕日韩精品| 久久精品国产91精品亚洲| 欧美成人精品在线观看| 国模极品一区二区三区| 久久久久久91香蕉国产| 亚洲男人天堂2019| 久久人人97超碰精品888| 成人免费观看49www在线观看| 欧美日韩国产成人在线观看| 日韩精品一区二区视频| 亚洲永久在线观看| 91视频国产一区| 欧美肥婆姓交大片| 久久精品亚洲热| 亚洲电影在线看| 欧美日韩激情小视频| 伊人av综合网| 欧美午夜精品久久久久久人妖| 日韩精品免费观看| 欧美极度另类性三渗透| 日韩免费中文字幕| 亚洲国产精彩中文乱码av| 中文字幕日韩欧美在线视频| 好吊成人免视频| 亚洲欧美制服丝袜| 欧美电影免费观看电视剧大全| 91精品免费视频| 欧美老女人性生活| 欧美成人午夜剧场免费观看| 九九综合九九综合| 国产va免费精品高清在线| 国产一级揄自揄精品视频| 国产精品亚洲激情| 成人在线视频网| 国产精品国产三级国产专播精品人| 国产精品久久久久高潮| 在线观看免费高清视频97| 97国产在线视频| 亚洲欧美国产精品专区久久| 日韩在线中文字幕| 国产精品日韩欧美| 亚洲精品91美女久久久久久久| 久久夜色精品亚洲噜噜国产mv| 日韩欧美有码在线| 日韩中文字幕久久| 久久久久国产精品免费网站| 欧美www在线| 一区二区亚洲精品国产| 欧洲亚洲免费视频| 国产精品黄色影片导航在线观看| 国产91精品久| 国产福利精品av综合导导航| 96pao国产成视频永久免费| 久久亚洲精品国产亚洲老地址| zzijzzij亚洲日本成熟少妇| 久久久久久久国产精品| 黄色一区二区三区| 日韩中文字幕国产| 欧美日韩一区二区三区| 亚洲精品aⅴ中文字幕乱码| 欧美最顶级丰满的aⅴ艳星| 91大神福利视频在线| 亚洲性猛交xxxxwww| 91精品国产综合久久久久久蜜臀| 性欧美暴力猛交69hd| 一区二区三区视频免费在线观看| 91精品久久久久| 精品国产欧美一区二区三区成人| 欧美精品成人91久久久久久久| 91精品久久久久久久久久久久久久| 国产精品久久久久久一区二区| 91成人在线观看国产| 国产精品国产亚洲伊人久久| 国产成人在线播放| 亚洲www永久成人夜色| 最好看的2019的中文字幕视频| 91免费看视频.| 欧美激情精品久久久久久黑人| 国产精品成人一区| 亚洲精美色品网站| 日本视频久久久| 中文字幕精品—区二区| 九九精品视频在线观看| zzijzzij亚洲日本成熟少妇| 少妇久久久久久| 欧美精品中文字幕一区| 欧美日韩国产二区| 国产日韩专区在线| 国产精品免费久久久久影院| 国产精品尤物福利片在线观看| 国产视频观看一区| 午夜精品久久久久久久99黑人| 精品久久中文字幕久久av| 欧美激情精品久久久| 欧美日韩免费一区| 国产精品露脸av在线| 国产精品亚洲网站| 国产女精品视频网站免费| 91丝袜美腿美女视频网站| 久久躁日日躁aaaaxxxx| 国产日韩欧美电影在线观看| 精品国产鲁一鲁一区二区张丽| 亚洲美女精品久久| 欧美性色xo影院| 精品久久香蕉国产线看观看亚洲| 91av视频导航| 日韩成人黄色av| 在线观看欧美www| 欧美亚州一区二区三区| 久久亚洲一区二区三区四区五区高| 日韩在线视频免费观看| 欧美乱大交xxxxx| 国产精品久久久久久亚洲调教| 国产日韩精品在线| 精品日韩中文字幕| 日本精品在线视频| 亚洲女人初尝黑人巨大| 久久免费少妇高潮久久精品99| 亚洲国产精品嫩草影院久久| 国产97在线播放| 国内精品视频久久| 亚洲精品一区中文字幕乱码| 欧美精品久久久久久久| 亚洲国产精品久久久久秋霞蜜臀| 国产精品丝袜白浆摸在线| 欧美激情精品久久久久久蜜臀| 国产日韩在线视频| 亚洲精品在线看| 久久91亚洲精品中文字幕奶水| 日韩欧美国产免费播放| 国产精品一二三在线| 中文字幕亚洲无线码在线一区| 午夜精品久久久久久久久久久久久| 亚洲人成在线电影| 91欧美精品午夜性色福利在线| 一区二区日韩精品| 91手机视频在线观看| 精品露脸国产偷人在视频| 岛国视频午夜一区免费在线观看| 一本色道久久综合狠狠躁篇怎么玩| 爽爽爽爽爽爽爽成人免费观看| 韩国福利视频一区| 日韩成人中文字幕在线观看| 国产精品私拍pans大尺度在线| 国产女人精品视频| 欧美在线一区二区视频| 日韩精品中文字| 都市激情亚洲色图| 久久久久久久一区二区| 午夜精品久久17c|