當編寫乙個方法時,我們允許它傳入的引數是不確定的。這時候可以使用物件擴充套件運算子來作引數,看乙個簡單的列子:
functionxzdemo(...arg)
xzdemo(1,2,3);
這時我們看到控制台輸出了 1,2,3,undefined,這說明是可以傳入多個值,並且就算方法中引用多了也不會報錯。
我們先用乙個例子說明,我們宣告兩個陣列arr1和arr2,然後我們把arr1賦值給arr2,然後我們改變arr2的值,你會發現arr1的值也改變了,因為我們這是對記憶體堆疊的引用,而不是真正的賦值。
let arr1=['www','xzblogs','com'];let arr2=arr1;
console.log(arr2);
arr2.push('new');
console.log(arr1);
控制台輸出:
["www", "xzblogs", "com"]
["www", "xzblogs", "com", "new"]
現在控制台預覽時,你可以看到我們的arr1並沒有改變,簡單的擴充套件運算子就解決了這個問題。
這是我們不想看到的,可以利用物件擴充套件運算子簡單的解決這個問題,現在我們對**進行改造。
let arr1=['www','
jspang
','com'];
//let arr2=arr1;
let arr2=[...arr1];
console.log(arr2);
arr2.push(
'shenghongyu');
console.log(arr2);
console.log(arr1);
現在控制台預覽時,你可以看到我們的arr1並沒有改變,簡單的擴充套件運算子就解決了這個問題。
如果你已經很好的掌握了物件擴充套件運算子,那麼理解rest運算子並不困難,它們有很多相似之處,甚至很多時候你不用特意去區分。它也用…(三個點)來表示,我們先來看乙個例子。
functionxzdemo(first,...arg)
xzdemo(0,1,2,3,4,5,6,7);
這時候控制台列印出了7,說明我們arg裡有7個陣列元素,這就是rest運算子的最簡單用法。
這裡我們用for…of迴圈來進行列印出arg的值,我們這裡只是簡單使用一下function
xzdemo(first,...arg)}
xzdemo(0,1,2,3,4,5,6,7); 結果迴圈出1-7 console.log(1) console.log(2) …
for…of的迴圈可以避免我們開拓記憶體空間,增加**執行效率,所以建議大家在以後的工作中使用for…of迴圈。有的小夥伴會說了,反正最後要轉換成es5,沒有什麼差別,但是至少從**量上我們少打了一些單詞,這就是開發效率的提高。
擴充套件運算子和rest運算子
擴充套件運算子用三個點號表示,功能是把陣列或類陣列物件展開成一系列用逗號隔開的值 一 拆分陣列 擴充套件運算子可以直接把陣列拆分成用逗號隔開的值 template section class p 10 el button type danger click get 點選 el button sect...
ECMAScript 擴充套件運算子與rest引數
一 擴充套件運算子與rest引數 運用1.擴充套件運算子 把陣列或者類陣列展開成用逗號隔開的值 擴充套件運演算法 function foo a,b,c let arr 1 2,3 foo arr 陣列合併 let arr1 1 2,3 let arr2 4 5,6 es5的做法 array.prot...
rest 引數與擴充套件運算子
rest 引數與擴充套件運算子 1.rest 引數 es6 引入 rest 引數 形式為.變數名 用於獲取函式的多餘引數,這樣就不需要使用arguments物件了。rest 引數搭配的變數是乙個陣列,該變數將多餘的引數放入陣列中。function add values return sum add ...