<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在本教學中,您將瞭解在 JavaScript 中使用擴充套件運運算元的不同方式,以及擴充套件運運算元和剩餘運運算元之間的主要區別。
由三個點 ( ...
) 表示,JavaScript 擴充套件運運算元是在 ES6 中引入的。它可用於將集合和陣列中的元素擴充套件為單個單獨的元素。
擴充套件運運算元可用於建立和克隆陣列和物件、將陣列作為函數引數傳遞、從陣列中刪除重複項等等。
擴充套件運運算元只能用於可迭代物件。它必須在可迭代物件之前使用,沒有任何分隔。例如:
console.log(...arr);
以Math.min()方法為例。此方法接受至少一個數位作為引數,並返回傳遞的引數中最小的數位。
如果您有一個數位陣列並且您想找到這些數位中的最小值,那麼在沒有展開運運算元的情況下,您需要使用它們的索引一個一個地傳遞元素,或者使用apply()方法來傳遞陣列作為引數。例如:
const numbers = [15, 13, 100, 20]; const minNumber = Math.min.apply(null, numbers); console.log(minNumber); // 13
請注意,第一個引數是null
,因為第一個引數用於更改this
呼叫函數的值。
擴充套件運運算元是將陣列元素作為引數傳遞給函數的更方便和可讀的解決方案。例如:
const numbers = [15, 13, 100, 20]; const minNumber = Math.min(...numbers); console.log(numbers); // 13
擴充套件運運算元可用於從現有陣列或其他包含Symbol.iterator()方法的可迭代物件建立新陣列。這些是可以使用for...of
迴圈迭代的物件。
例如,它可用於克隆陣列。如果您只是將現有陣列的值分配給新陣列,則對新陣列進行更改將更新現有陣列:
const numbers = [15, 13, 100, 20]; const clonedNumbers = numbers; clonedNumbers.push(24); console.log(clonedNumbers); // [15, 13, 100, 20, 24] console.log(numbers); // [15, 13, 100, 20, 24]
通過使用擴充套件運運算元,可以將現有陣列克隆到一個新陣列中,並且對新陣列所做的任何更改都不會影響現有陣列:
const numbers = [15, 13, 100, 20]; const clonedNumbers = [...numbers]; clonedNumbers.push(24); console.log(clonedNumbers); // [15, 13, 100, 20, 24] console.log(numbers); // [15, 13, 100, 20]
應該注意的是,這隻會克隆一維陣列。它不適用於多維陣列。
擴充套件運運算元也可用於將多個陣列連線為一個。例如:
const evenNumbers = [2, 4, 6, 8]; const oddNumbers = [1, 3, 5, 7]; const allNumbers = [...evenNumbers, ...oddNumbers]; console.log(...allNumbers); //[2, 4, 6, 8, 1, 3, 5, 7]
您還可以在字串上使用擴充套件運運算元來建立一個陣列,其中每個專案都是字串中的一個字元:
const str = 'Hello, World!'; const strArr = [...str]; console.log(strArr); // ['H', 'e', 'l', 'l', 'o', ',', ' ', 'W', 'o', 'r', 'l', 'd', '!']
擴充套件運運算元可以以不同的方式用於建立物件。
它可用於淺克隆另一個物件。例如:
const obj = { name: 'Mark', age: 20}; const clonedObj = { ...obj }; console.log(clonedObj); // {name: 'Mark', age: 20}
它還可以用於將多個物件合併為一個。例如:
const obj1 = { name: 'Mark', age: 20}; const obj2 = { occupation: 'Student' }; const clonedObj = { ...obj1, ...obj2 }; console.log(clonedObj); // {name: 'Mark', age: 20, occupation: 'Student'}
需要注意的是,如果物件共用相同的屬性名稱,將使用最後一個物件展開的值。例如:
const obj1 = { name: 'Mark', age: 20}; const obj2 = { age: 30 }; const clonedObj = { ...obj1, ...obj2 }; console.log(clonedObj); // {name: 'Mark', age: 30}
擴充套件運運算元可用於從陣列建立物件,其中陣列中的索引成為屬性,該索引處的值成為屬性的值。例如:
const numbers = [15, 13, 100, 20]; const obj = { ...numbers }; console.log(obj); // {0: 15, 1: 13, 2: 100, 3: 20}
它還可以用於從字串建立物件,其中,字串中的索引成為屬性,該索引處的字元成為屬性的值。例如:
const str = 'Hello, World!'; const obj = { ...str }; console.log(obj); // {0: 'H', 1: 'e', 2: 'l', 3: 'l', 4: 'o', 5: ',', 6: ' ', 7: 'W', 8: 'o', 9: 'r', 10: 'l', 11: 'd', 12: '!'}
NodeList是節點的集合,它們是檔案中的元素。元素通過集合中的方法存取,例如item
or entries
,與陣列不同。
您可以使用擴充套件運運算元將 NodeList 轉換為 Array。例如:
const nodeList = document.querySelectorAll('div'); console.log(nodeList.item(0)); // <div>...</div> const nodeArray = [...nodeList]; console.log(nodeList[0]); // <div>...</div>
Set物件是一個僅儲存唯一值的集合。與 NodeList 類似,可以使用擴充套件運運算元將 Set 轉換為陣列。
由於 Set 僅儲存唯一值,因此可以將其與擴充套件運運算元配對以從陣列中刪除重複項。例如:
const duplicatesArr = [1, 2, 3, 2, 1, 3]; const uniqueArr = [...new Set(duplicatesArr)]; console.log(duplicatesArr); // [1, 2, 3, 2, 1, 3] console.log(uniqueArr); // [1, 2, 3]
rest 運運算元也是一個三點運運算元 ( ...
),但它用於不同的目的。rest 運運算元可以在函數的參數列中使用,表示該函數接受未定義數量的引數。這些引數可以作為陣列處理。
例如:
function calculateSum(...funcArgs) { let sum = 0; for (const arg of funcArgs) { sum += arg; } return sum; }
在此範例中,rest 運運算元用作calculateSum
函數的引數。然後,您迴圈遍歷陣列中的專案並將它們相加以計算它們的總和。
然後,您可以將變數一個一個地calculateSum
作為引數傳遞給函數,或者使用擴充套件運運算元將陣列的元素作為引數傳遞:
console.log(calculateSum(1, 2, 3)); // 6 const numbers = [1, 2, 3]; console.log(calculateSum(...numbers)); // 6
擴充套件運運算元允許您用更少的程式碼行做更多的事情,同時保持程式碼的可讀性。它可以用於可迭代物件以將引數傳遞給函數,或從其他可迭代物件建立陣列和物件。
到此這篇關於如何在JavaScript中使用展開運運算元的文章就介紹到這了,更多相關JS使用展開運運算元內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45