通過四個例子我們來理解擴充套件運算子.
如何理解它? 它就像鳥兒伸展他的翅膀..( 圖片來自 unsplash)
它看起來像什麼? 三個點: ...
它能做什麼? 它允許一個表示式擴充成多個標記/變數/引數。
廢話少說,讓我們通過一些例子來理解到底什麼是擴充套件運算子。
-
建立一個陣列
middle
-
再建立一個陣列把
middle
包含進去 -
列印出結果
var middle = [3, 4];
var arr = [1, 2, middle, 5, 6];複製程式碼
console.log(arr);
// [1, 2, [3, 4], 5, 6]複製程式碼
上面的程式碼,我們沒有使用擴充套件運算子。展示了,一個陣列包含另一個陣列。
上面程式碼沒有問題,但是我們只想要一個陣列呢?
那我們就可以使用擴充套件運算子了,再提一句,擴充套件運算子允許陣列中的元素分解出來。來看看下面的程式碼,除了我們使用了擴充套件運算子,和上面的程式碼幾乎一樣。
var middle = [3, 4];
var arr = [1, 2, ...middle, 5, 6];複製程式碼
console.log(arr);
// [1, 2, 3, 4, 5, 6]複製程式碼
上面的程式碼展示了擴充套件運算子使用的關鍵,正如你所看到的,當我們創造了arr
陣列,對middle
資料使用了擴充套件運算子, middle
陣列被分解了,裡面的每一個元素都插入到了arr
陣列中。這意味它不再是巢狀陣列,而是變成了包含1到6的普通陣列。
複製陣列
slice()
是JS陣列的一個方法,它可以複製陣列,類似的方法,我們可以使用擴充套件運算子來複制陣列:
var arr = [`a`, `b`, `c`];
var arr2 = [...arr];複製程式碼
console.log(arr2);
// [`a`, `b`, `c`]複製程式碼
arr
陣列被分解成單個字母,然後被分配給arr2
陣列。現在我們對arr2
陣列做任何改變都不會影響arr
源陣列。
具體原因是我們讓arr2
的值等於arr
,而不是等於arr
本身。為了讓這個說法更有說服力,我們試試不用擴充套件運算子。
如果我們僅僅是建立一個陣列然後讓另外一個陣列等於它,那麼程式碼看起來是這樣的:
var arr = [`a`, `b`, `c`];
var arr2 = arr;複製程式碼
console.log(arr2);
// [`a`, `b`, `c`]複製程式碼
現在,你可能會說,它看起來和上面的效果一樣!
它們看起來一樣,但是本質是不一樣的。arr
直接賦值給arr2
,這意味著,對arr2
的任何操作將影響arr
源陣列。
arr2.push(`d`);複製程式碼
console.log(arr2);
// [`a`, `b`, `c`, `d`]複製程式碼
console.log(arr);
// [`a`, `b`, `c`, `d`]複製程式碼
正如你所看到的,即使我們沒有明確的將新的值加入到源arr
中,我們的新值d
仍然加入到了arr
陣列中。
連線陣列
我們可以使用擴充套件運算子替代concat()
來連線陣列。首先,我們來看看concat()
方法是如何實現的。
var arr = [`a`, `b`, `c`];
var arr2 = [`d`, `e`, `f`];
**arr1 = arr.concat(arr2);**
console.log(arr);
// [`a`, `b`, `c`, `d`, `e`, `f`]複製程式碼
使用擴充套件運算子:
var arr = [`a`, `b`, `c`];
var arr2 = [`d`, `e`, `f`];複製程式碼
**arr = [...arr, ...arr2];**
console.log(arr);
// [`a`, `b`, `c`, `d`, `e`, `f`]複製程式碼
完全相同的結果!每一個陣列被分解然後加入到一個新的arr
陣列。
Math
我們也可以在使用math函式時結合擴充套件運算子。我們來舉個例子。
Math.max()
會返回一堆數字中最大的數。
Math.max();
// -Infinity複製程式碼
Math.max(1, 2, 3);
// 3複製程式碼
Math.max(100, 3, 4);
// 100複製程式碼
如果不使用擴充套件運算子,最簡單的方式是使用.apply()
,將一個陣列作為引數傳入Math.max()
var arr = [2, 4, 8, 6, 0];複製程式碼
function max(arr) {
return Math.max.apply(null, arr);
}複製程式碼
console.log(max(arr));
// 8複製程式碼
這樣做很麻煩。
現在來看一下我們如何使用擴充套件運算子來得到相同的結果的。我們只需要兩行程式碼:
var arr = [2, 4, 8, 6, 0];
var max = Math.max(...arr);複製程式碼
console.log(max);
// 8複製程式碼
字串轉換陣列
使用擴充套件運算子將字串轉換成陣列。
var str = "hello";
var chars = [...str];複製程式碼
console.log(chars);
// [`h`, `e`,` l`,` l`, `o`]複製程式碼
很酷吧!擴充套件運算子遍歷str
字串中的每個字元,然後分配到新的chars
陣列中。