免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
解構(gòu)賦值Destructure
  1. 如何從一個(gè)復(fù)雜的數(shù)據(jù)結(jié)構(gòu)中提取數(shù)據(jù)

  2. es5

  • 在es5中從復(fù)雜的數(shù)據(jù)結(jié)構(gòu)中去挑數(shù)據(jù)是需要層層的遍歷或者是引用,會相當(dāng)麻煩。

  • demo: es5從復(fù)雜的數(shù)據(jù)解構(gòu)中取出我們想要的數(shù)據(jù)

    let arr = ['hello', 'world']let firstName = arr[0]let surName = arr[1]console.log(firstName, surName)
    • 為什么要用變量來獲取這個(gè)數(shù)據(jù),如果說這個(gè)數(shù)據(jù)頻繁使用,每次都是通過索引去取顯然是不合適的,因?yàn)槊看螐臄?shù)組
      按照索引去取值它是需要花時(shí)間的,當(dāng)你頻繁的去取的時(shí)候是會消耗性能的。如果你用緩存,也就是用變量來存儲下你
      的數(shù)據(jù),那就會解決這個(gè)性能的問題。這就是為什么在復(fù)雜的數(shù)據(jù)結(jié)構(gòu)中一定要把你關(guān)心的或頻繁訪問的數(shù)據(jù)拿出來放
      到變量中去。就是這么一個(gè)背景。當(dāng)你的數(shù)組足夠長,然后你對里面的一些數(shù)據(jù)感興趣,你是不是需要頻繁的聲明變量
      ,然后還要通過索引的方式再賦值給這個(gè)變量,當(dāng)你的代碼量很復(fù)雜的時(shí)候你會發(fā)現(xiàn)光這一部分操作就占據(jù)了你這個(gè)代
      碼的很多行。從這個(gè)角度講它就不是很便捷的方式,因?yàn)槟阋鹨徊僮鳌?/p>

  1. es6

  • 而es6中所謂的更優(yōu)雅更便捷的方式就是解構(gòu)賦值。

  • demo: es6從復(fù)雜的數(shù)據(jù)解構(gòu)中取出我們想要的數(shù)據(jù)

    let arr = ['hello', 'world']let [firstName, surName] = arrconsole.log(firstName, surName)
    • 簡寫的方式,新聲明的變量必須跟對象屬性名一樣,如果這個(gè)變量跟屬性不一樣,它解構(gòu)賦值的時(shí)候就不知道你
      這個(gè)變量要和哪個(gè)屬性匹配,取哪個(gè)值。

      let {title: title2, width, height} = optionsconsole.log(title2, width, height)
    • 如果說你不想讓這個(gè)變量跟屬性名一樣,就不能簡寫了。后面的話必須要有一個(gè)變量名稱。

    • 它是一層一層的對應(yīng),解構(gòu)的過程其實(shí)就是按照左邊的變量的結(jié)構(gòu)和右邊數(shù)據(jù)的結(jié)構(gòu)要一致,然后我們挨個(gè)匹
      配,匹配到之后,右邊的是數(shù)據(jù)項(xiàng),左邊的是變量,一一來對應(yīng),一一映射。它是這么一個(gè)工作原理。也就是
      說你在用解構(gòu)賦值左側(cè)聲明變量的時(shí)候也要跟數(shù)據(jù)保持一樣的解構(gòu)。

    • 解構(gòu)賦值不僅可以賦簡單的變量,還可以賦值對象的屬性。

    • 這是解構(gòu)賦值的另一種形式,它在循環(huán)體中是這么用的。

    • 聲明臨時(shí)變量item用來保存數(shù)據(jù)

    • 如果數(shù)據(jù)沒有你這個(gè)變量對應(yīng)的值的時(shí)候不想得到undefined的話,可以在聲明變量的時(shí)候給它設(shè)置一個(gè)默認(rèn)值。

    • 當(dāng)你的數(shù)據(jù)量不夠的時(shí)候,通過解構(gòu)賦值,這個(gè)變量的值就跟我們沒賦值一樣,就是undefined,不是說你給它
      做了解構(gòu)賦值,這個(gè)變量就一定有值,它取決于你的這個(gè)數(shù)據(jù)有沒有值,沒有的話一律是undefined。

    • es5的時(shí)候是通過let兩次聲明變量,而到了es6只用了一個(gè)let,然后它所有的變量放到變量的集合里面,左面是你變
      量的集合,右面是你的數(shù)據(jù)。這樣的話就輕松的拿到了你所關(guān)心的數(shù)據(jù)以及和變量的對應(yīng)。相當(dāng)于是一次集體的賦值,
      它不是逐一賦值,是集體的賦值,一下就賦值過去了。這就叫解構(gòu)賦值。什么叫解構(gòu)呢,解構(gòu)就是說把數(shù)據(jù)給你拆解開,
      拆解開的目的是什么呢,是把你拆解出的數(shù)據(jù)賦值給一些變量。所以這就是解構(gòu)賦值的意思。越復(fù)雜的數(shù)據(jù)解構(gòu)就越會
      體現(xiàn)出解構(gòu)賦值的優(yōu)越性。

    1. Object解構(gòu)賦值基礎(chǔ)情況
      let options = { title: 'menu', width: 100, height: 200 } let {title, width, height} = options console.log(title, width, height)

    1. 默認(rèn)值的問題
      let {title: title2, width = 130, height} = options console.log(title2, width, height)

    2. rest
      let {title, ...last} = options console.log(title2, last)

    3. 復(fù)雜的嵌套的數(shù)據(jù)結(jié)構(gòu)
      let options = { size: { width: 100, height: 200 }, items: ['Cake', 'Donut'], extra: true } let {size: {width: width2, height}, items: [item1]} = options console.log(width2, height, item1)

    1. 函數(shù)參數(shù)復(fù)雜的時(shí)候也可以用解構(gòu)賦值

    1. Object的解構(gòu)賦值

    1. Array的解構(gòu)賦值
      let arr = ['a', 'b', 'c', 'd']

    2. 如何跳過某個(gè)賦值元素
      let [firstName, , thirdName] = arr // 取數(shù)組的第一三項(xiàng)

    3. 凡是可遍歷的對象的數(shù)據(jù)解構(gòu)都可以解構(gòu)賦值,這個(gè)可遍歷的對象是什么呢,比如我們前面講的set,map,字符串。
      數(shù)組或者是字符串,你可以用索引來取某一位或某一項(xiàng)內(nèi)容。但如果是set,我們是怎么獲取某一個(gè)元素的?是用
      get或者遍歷的方式吧,它是不支持索引的。但是利用解構(gòu)賦值的話,它根本就不用索引的方式,你只要左邊寫中括
      號,默認(rèn)按照索引的位置排序去取就可以了。不需要顯示的指定索引值。根本就不需要關(guān)心右邊這個(gè)數(shù)據(jù)解構(gòu)該怎么
      取的問題。

      let [firstName, , thirdName] = new Set([1, 2, 3, 4])
    4. 如果左邊不新生成變量,而是把它賦值到一個(gè)對象屬性上面去,那該怎么做呢?
      let user = {name: 's', surname: 't'}

    5. 循環(huán)

    6. rest
      let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9] let [firstName, curName, ...last] = arr console.log(firstName, curName, last)

    7. 前面講的都是正常的情況,數(shù)據(jù)足夠多,然后給這個(gè)賦值。但我們知道賦值的時(shí)候你不能保證你的數(shù)據(jù)一定是有內(nèi)
      容的,這不就是極端或者是異常的情況嗎。
      let arr = [1, 2, 3] let [firstName, curName, ...last] = arr console.log(firstName, curName, last) // 1 2 [3] let arr = [1, 2] console.log(firstName, curName, last) // 1 2 [] let arr = [1] console.log(firstName, curName, last) // 1 undefined [] let arr = [] console.log(firstName, curName, last) // undefined undefined []

      let arr = []console.log(firstName = 'hello', curName, last) // hello undefined []
    1. es5
      user.name = arr[0] user.surname = arr[1]

    2. es6
      [user.name, user.surname] = [1, 2]

    1. es5
      for (let i = 0, item; i < arr.length; i ) { item = arr[i] }

    2. es6
      let user = {} for (let [k, v] of Object.entries(user)) { console.log(k, v) }

來源:https://www.icode9.com/content-4-658051.html
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
es6新增新特性簡要總結(jié)
es6 快速入門 系列 —— 解構(gòu)
ECMAScript 6 掃盲
你可能不知道的19個(gè)JavaScript編碼技巧
JavaScript 開發(fā)人員需要知道的簡寫技巧
js基礎(chǔ) ---- for循環(huán)中l(wèi)et和var的區(qū)別
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服