擴展運算符是三個點(...)。個人認為是對于數(shù)組操作的簡化版。(千萬不要因為漏打一個點報錯芭岛恕3ぁ!)
簡化apply方法
一窖杀、展開數(shù)組
function doSth(a,b,c){
return a+b+c
}
這里我們傳參一般為
doSth(1,2,3) //6漓摩。
參數(shù)為數(shù)組let arr = [1,2,3],那么可能我們要手動展開傳參入客,但擴展運算符可以簡化這部操作管毙。
doSth(...[1,2,3]) //6
或者
doSth(...arr) //6 (后面就不展示這種方式了!)
二桌硫、取最大值
Math.max.apply(null,[11,5,20]) //20
Math.max(...[11,5,20]) //20
Math.max(11,5,20) //20
擴展運算符就是展開數(shù)組成為參數(shù)序列夭咬。
三、push一個數(shù)組到另一數(shù)組尾部
let arr1 = [1,2]
let arr2 = [3,4]
Array.prototype.push.apply(arr1,arr2) //[1,2,3,4]
//用到擴展運算符:
arr1.push(...arr2) //[1,2,3,4]
是不是方便到家C(前者是因為ES5中push參數(shù)無法是數(shù)組)
四卓舵、復制數(shù)組
數(shù)組是復合的數(shù)據(jù)類型,直接復制的話咖驮,只是復制了指向底層數(shù)據(jù)結構的指針边器,而不是克隆一個全新的數(shù)組。
let arr1 = [1,2]
let arr2 = arr1
arr2[0] = 2
arr1 //[2, 2]
我們改變了arr2托修,arr1也改變了忘巧。說明arr2并不是arr1的克隆,而是指向同一份數(shù)據(jù)的另一個指針睦刃。修改arr2砚嘴,會直接導致arr1的變化。我們可以這樣:
let arr1 = [1,2]
let arr2 = arr1.concat()
arr2[0] = 2
arr1 //[1, 2]
這樣就不會影響arr1了涩拙。我們用擴展運算符呢际长?
let arr1 = [1,2]
let arr2 = [...arr1]
//或
let [...arr2] = arr1
兩種寫法都可以。
五兴泥、合并數(shù)組
let arr1 = [0,1,2]
let arr2 = [3,4,5]
let arr3 = [6,7,8]
arr1.concat(arr2,arr3) //[0,1,2,3,4,5,6,7,8]
//擴展運算符:
[...arr1,...arr2,...arr3] //[0,1,2,3,4,5,6,7,8]
以上兩種方法都是淺拷貝工育,修改一個數(shù)組中的值都會影響合并數(shù)組中的值。
權威參考ES6:http://es6.ruanyifeng.com/?search=%E6%89%A9%E5%B1%95%E8%BF%90%E7%AE%97%E7%AC%A6&x=0&y=0#docs/array