<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          10 個關(guān)于JavaScript Spread Syntax (...)的強大用途

          共 4337字,需瀏覽 9分鐘

           ·

          2022-07-05 06:36

          英文 | https://javascript.plainenglish.io/10-powerful-uses-of-spread-syntax-that-youll-love-a3fe70ae503c

          翻譯 | 楊小愛


          擴展語法—Spread Syntax(…) 是 ES6 中引入的一個新特性,它允許我們從可迭代對象中快速提取元素。使用這種語法,我們可以避免使用大量復(fù)雜的 API,編寫更簡潔的代碼。看完這篇文章,相信你會喜歡這個功能的。

          1、復(fù)制一個數(shù)組

          復(fù)制數(shù)組的傳統(tǒng)方法是使用數(shù)組的切片方法。

          let arr = [1, 2, 3, [4, 5]];
          let copy = arr.slice()console.log(copy)// [1, 2, 3, [4, 5]];;

          但是, slice 方法最初是為了捕獲數(shù)組的片段,而不是復(fù)制它們。這個 API 很容易忘記,但是使用擴展語法非常簡單明了:

          2、復(fù)制一個對象

          要復(fù)制對象,您可以使用 Object.assign() :

          let user = { name: 'bytefish', url: 'https://bytefish.medium.com'}
          let copy = Object.assign({}, user)console.log(copy);

          輸出:

          Object {name: "bytefish", url: "https://bytefish.medium.com"}

          使用擴展語法

          let user = { name: 'bytefish', url: 'https://bytefish.medium.com'}
          let copy = {...user}console.log(copy);

          輸出:

          Object {name: "bytefish", url: "https://bytefish.medium.com"}

          使用擴展語法,您可以提取對象的所有可枚舉屬性并將它們添加到新對象中。

          3、將元素添加到數(shù)組的開頭或結(jié)尾

          在數(shù)組的開頭和結(jié)尾添加元素是一項頻繁的任務(wù),數(shù)組提供了 push 和 unshift 方法:

          let arr = [3]
          arr.unshift(1, 2)arr.push(4, 5)
          console.log(arr);

          輸出:

          [1, 2, 3, 4, 5]

          如果我們使用擴展語法,代碼會更加簡潔易懂:

          let arr = [3]
          let copy = [1, 2, ...arr, 4, 5]
          console.log(copy);

          輸出:

          [1, 2, 3, 4, 5]

          注意:arr.push 和 arr.unshift 修改當(dāng)前數(shù)組,而擴展語法創(chuàng)建一個新數(shù)組。你應(yīng)該根據(jù)自己的需求選擇合適的方法。

          4、合并數(shù)組

          傳統(tǒng)方式:

          let arr1 = [1, 2, 3]let arr2 = [4, 5, 6]
          let arr3 = arr1.concat( arr2 )console.log(arr3);

          使用擴展語法:

          let arr1 = [1, 2, 3]let arr2 = [456]let arr3 = [...arr1, ...arr2]console.log(arr3);

          輸出

          [1, 2, 3, 4, 5, 6]

          5、合并對象

          傳統(tǒng)方式:

          let p1 = { name: 'bytefish' }let p2 = { tag: 'JavaScript' }
          let p3 = Object.assign({}, p1, p2)console.log(p3) ;

          輸出

          Object {name: "bytefish", tag: "JavaScript"}

          使用擴展語法:

          let p1 = { name: 'bytefish' }let p2 = { tag: 'JavaScript' }
          let p3 = {...p1, ...p2}console.log(p3) ;

          輸出

          Object {name: "bytefish", tag: "JavaScript"}

          6、 將字符串轉(zhuǎn)換為數(shù)組

          傳統(tǒng)方式:

          let str = 'bytefish'
          let arr = str.split('')
          console.log(arr) ;

          ?輸出

          ["b", "y", "t", "e", "f", "i", "s", "h"]

          使用擴展語法:

          let str = 'bytefish'let arr = [...str]console.log(arr) ;

          輸出

          ["b", "y", "t", "e", "f", "i", "s", "h"]

          7、 將類數(shù)組對象轉(zhuǎn)換為數(shù)組

          JavaScript 中的一些數(shù)據(jù)結(jié)構(gòu)看起來像數(shù)組但不是數(shù)組,例如 NodeList、函數(shù)的參數(shù)對象等。

          與數(shù)組一樣,它們是順序結(jié)構(gòu),其中的元素可以通過索引訪問。但是它們沒有普通數(shù)組的一些屬性和方法。

          function sum(){  console.log(arguments)  console.log(arguments instanceof Array)}
          sum(1, 2, 3);

          輸出

          Arguments {0: 1, 1: 2, 2: 3}false

          為了使用這些類似數(shù)組的對象,我們有時需要將它們轉(zhuǎn)換為數(shù)組。

          傳統(tǒng)方式:

          function foo(){  let argArray = Array.from(arguments)  console.log(argArray instanceof Array)}
          foo();

          輸出:

          true

          使用擴展語法:

          function sum(){  console.log(arguments)
          let argArray = [...arguments]
          console.log(argArray instanceof Array)}
          sum(1, 2, 3);
          Arguments {0: 1, 1: 2, 2: 3}true

          在 JavaScript 中,Rest Syntax 和 Spread Syntax 的表示法是相同的,都是用三個點(…)表示。但它們也有一些微妙的區(qū)別:

          • Rest 語法將所有剩余元素收集到一個數(shù)組或?qū)ο笾小?/span>

          • 擴展語法將收集的元素(例如數(shù)組)解壓縮為單個元素。

          這里還有幾個同樣使用Spread Syntax (…)的例子,理論上應(yīng)該屬于 Rest Syntax。雖然Spread語法和Rest語法相似,但我認(rèn)為沒有必要關(guān)心這些概念上的細(xì)微差別。所以我也會在這里放幾個 Rest Syntax 用法的例子。

          8、提取對象

          假設(shè)有一個對象:

          let httpOptions = {  method: 'POST',  url: 'https://api.github.com',  returnType: 'json',  timeout: 2000,  data: {    name: 'bytefish'  }}

          我們想拿到這個對象的method和url,把其他字段放在一起,怎么辦呢?

          使用擴展語法,我們可以這樣寫:

          提取這個對象的屬性只需要一行代碼,幾乎找不到更簡潔的寫法。

          9、無限參數(shù)的函數(shù)

          假設(shè)我們需要編寫一個求和函數(shù),它可以接受任意數(shù)量的參數(shù)并將它們相加。我們?nèi)绾尉帉戇@樣的函數(shù)?

          新手程序員可能想知道一個函數(shù)如何可以接受無限數(shù)量的參數(shù)。他可能會使用一個數(shù)組作為參數(shù)并編寫如下內(nèi)容:

          function sum(arr){  return arr.reduce((acc, cur) => acc + cur)}
          console.log(sum([1, 2, 3, 4]));

          不過這種寫法需要我們把參數(shù)組合成一個數(shù)組來傳遞,不是很優(yōu)雅。一個更好的想法是使用函數(shù)的參數(shù)對象來動態(tài)讀取參數(shù)。

          function sum() {    let argsArray = Array.from(arguments)     return argsArray.reduce((acc, cur) => acc + cur)}
          console.log( sum(1, 2, 3, 4) ) // 10console.log( sum(1, 3, 5, 7) ) // 16;

          如果我們使用擴展語法,我們可以直接將所有參數(shù)組合在一起:

          function sum(...arr) {    return arr.reduce((acc, cur) => acc + cur)}
          console.log( sum(1, 2, 3, 4) ) // 10console.log( sum(1, 3, 5, 7) ) // 16;

          這樣,無論我們傳遞多少個參數(shù),它們都會被放在 arr 中。這顯然比第一個更優(yōu)雅,也比第二個更方便。

          Math.max

          許多 JavaScript 內(nèi)置函數(shù)都使用這種技術(shù),例如 Math.max。

          如您所見,Math.max 可以接受任意數(shù)量的參數(shù)。

          如果我們想獲得數(shù)組中的最大或最小數(shù)字,我們可以這樣寫:

          let arr = [23, 34, 53, 3]
          console.log(Math.max(...arr))console.log(Math.min(...arr));

          輸出

          533

          10、Rest Parameters

          除了上面的用法,我們還可以使用rest參數(shù)。假設(shè)我們有一個函數(shù),它的前兩個參數(shù)是固定的,其余參數(shù)是不確定的,所以我們可以這樣寫:

          function team(leader, viceLeader, ...members){  console.log('leader: ' + leader)  console.log('vice leader: ' + viceLeader)  members.forEach(member => console.log('member: ' + member))}
          team('Jon', 'Jack', 'Bob', 'Alice');

          輸出

          "leader: Jon""vice leader: Jack""member: Bob""member: Alice"

          結(jié)論

          我們終于學(xué)會了它,在 JavaScript 中使用擴展語法的 10 種方法。我希望你發(fā)現(xiàn)它對你很有用。如果是這樣,請務(wù)必在評論中告訴我。


          學(xué)習(xí)更多技能

          請點擊下方公眾號

          瀏覽 39
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  成人无码不卡免费视频 | 香蕉视频亚洲 | 高清无码一区在线 | 一本到高清色情久久无码中文 | 婷婷丁香激情五月 |