JS ES新特性 擴充套件運算子介紹
阿新 • • 發佈:2021-12-03
一、擴充套件運算子
擴充套件運算子是三個點...,允許將一個表示式原地展開,當需要多個引數(比如函式的呼叫時) 或者多個值(比如陣列)它會將其轉為用逗號分隔的引數序列。
示例程式碼如下所示:
// 定義一個數組 let arr = [1,2,3,4,5,6] // 使用 ... 擴充套件運算子展開 console.log(...arr); // 1 2 3 4 5 6 // 定義一個函式 function fun(...item) { console.log(...item); } // 呼叫函式 fun(1,6) // 1 2 3 4 5 6 // 與表示式配合使用 let x = 10 arr = [ ...(x > 0 ? ['a'] : []),'b',]; console.log(...arr); //a b
二、替代apply()方法
由於擴充套件運算子可以展開陣列,所以不再需要apply
方法,將陣列轉為函式的引數了。
示例程式碼如下所示:
// 定義一個函式 function fun(a,b,cwww.cppcns.com,d,e) { console.log(a,c,e); } // 定義一個數組 let arr = [1,5] // ES5 呼叫方式 fun.apply(null,arr) //1 2 3 4 5 // ES6 呼叫方式 fun(...arr) // 1 2 3 4 5
假如我們在實際開發中取出陣列中的最大值,採用的方式如下所示:
let arr = [1,20,30,50,88,] // ES5的寫法 let max = Math.max.apply(null,arr) console.log(max); // 88 www.cppcns.com
E的寫法如下所示:
let arr = [1,] // ES6 的寫法 let max = Math.max(...arr) console.log(max); // 88
三、擴充套件運算子的應用
擴充套件陣列的應用主要表現在以下幾個方面
1、複製陣列
在ECMAScript 2015
之前中如果僅僅是簡單的將arr1賦值給arr2,修改arr2時,arr1也會進行變化,這就是所謂的淺複製 ,
示例程式碼如下所示:
先來理解一下深淺複製的概念:
- 深複製:複製陣列中的元素內容
- 淺複製:複製陣列元素內容的記憶體地址
let arr1 = [1,5] let arr2 = arr1 consolrXaHMjKe.log(arr2); // [ 1,5 ] // 修改 arr2 的資料內容 arr2[2] = 6; // 兩者都會發生改變 console.log(arr1,arr2); 客棧// [ 1,6,5 ] [ 1,5 ]
如果想要完成深複製,示例程式碼如下所示:
let arr1 = [1,5] let arr2 = [] // ES5 寫法 for (let i = 0; i < arr1.length; i++) { arr2[i] = arr1[i]; } arr2[2] = 6; // 僅僅 arr2 改變 console.log(arr1,arr2); // [ 1,5 ] // ES6 寫法 arr2 = [...arr1] arr2[2] = 6; // 僅僅 arr2 改變 console.log(arr1,5 ]
2、合併陣列
擴充套件運算子提供了數組合並的新寫法。示例程式碼如下所示:
const arr1 = ['a','b']; const arr2 = ['c']; const arr3 = ['d','e']; // ES5 的合併陣列 console.log(arr1.concat(arr2,arr3)); // [ 'a','c','d','e' ] // ES6 的合併陣列 console.log([...arr1,...arr2,...arr3]); // [ 'a','e' ]
值得注意的是,這兩種方式都是淺複製
3、與解耦賦值結合使用
擴充套件運算子可以與解構賦值結合起來,用於生成陣列(用於取剩餘資料)。
注意 :只能將擴充套件運算子放置最後。
示例程式碼如下所示:
// 場景分析:取陣列中的第一個值和最後一個值 let arr = [1,5] let first,rest; // ES5 的寫法:借用 Array.slice() 函式 first = arr[0] rest = arr.slice(1) console.log(first,rest); // 1 [ 2,5 ] // ES6 的寫法 [first,...rest] = arr console.log(first,5 ]
4、將字串拆分為陣列
擴充套件運算子還可以將字串轉為真正的陣列。示例程式碼如下所示:
let str = '狐妖小紅娘' console.log([...str]); // [ '狐','妖','小','紅','娘' ]
到此這篇關於 ES新特性 擴充套件運算子介紹的文章就介紹到這了,更多相關ES 擴充套件運算子介紹內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!