把東西展開:Spread Operator
...
展開運算子,複製一份過去
例1
var arr = [1,2,3]
var arr2 = [4, ...arr ,5,6]
例2
var obj1 = {
a:1,
b:2
}
var obj2 = {
z:1
}
var obj3 = {
b:3,
...obj1 //但放在後面會把原本的 b 蓋掉所以 b 會變 2
}
「反向」的展開:Rest Parameters
...rest
意思是剩下的集結收起來
例1
var arr = [1,2,3,4]
var [first, ...rest] = arr
console.log(rest)
//[2,3,4]
例2
var obj = {
a:1,
b:2,
c:3
}
var {a, ...obj2} = obj
console.log(a, obj2)
//1 {b:2,c:3}
例3
var obj = {
a:1,
b:2,
}
var obj2 = {
...obj, //此處...展開
c:3,
}
var {a, ...rest} = obj2 //此處...集合
console.log(rest)
//{b:2,c:3}
例4
function add (...args) {
console.log(args)
return args[0] + args[1]
}
console.log(add(1,2))
//[1,2]
//3
或
function add (a, ...args) {
console.log(args)
return a + args[1]
}
console.log(add(1,2))
//[2]
//3
加上預設值:Default Parameters
預設參數(Default parameters) 函式預設參數允許沒有值傳入或是傳入值為 undefined 的情況下,參數能以指定的預設值初始化。
—MDN
例1
function repeat(str='hello', times = 5) {
return str.repeat(times)
}
console.log(repeat())
//hellohellohellohellohello
例2
const obj = {
a:1
}
const {a=123, b='hello'} = obj
console.log(a,b)
//1 'hello'