ES6 的扩展运算符,三个点...

对象的扩展运算符:(取出参数对象中所有可遍历属性,拷贝到当前对象中。==Object.assign()方法。)

//对象的扩展运算符
//对象的扩展运算符(...):取出参数对象中所有可遍历属性,拷贝到当前对象
var bar = {a:1, b:2}
var foo = {...bar};
console.log(foo);
//上述方法等价于:Object.assign(目标对象, arguments:源对象)
foo = Object.assign(foo, {a:2, b:3, c:4});
console.log(foo);//{a:2, b:3, c:4}
foo = Object.assign(foo, bar);
console.log(foo);//{a:1, b:2, c:4}
//Object.assign()用于对象合并,将源对象的所有可枚举属性,复制到目标对象。
var bar = {a:1, b:2, c:{nickname:'old'}}
var foo = {...bar, b: 'what'};
foo.c.nickname = 'new'
foo.b = 4;
console.log(foo);//{a:1, b:'what', c:{nickname: 'old'}}
console.log(bar);

数组的扩展运算符:原理同上,取出参数对象中所有可遍历属性,拷贝到当前对象中。

//将数组使用为参数序列,带入到函数中
function add(a, b){
    return a + b;
}
const numbers = [4, 39];
console.log(add(...[4, 6]))
console.log(add(...numbers))
//复制数组
const arr1 = [1, 2]
const arr2 = [...arr1];
console.log(arr2)
//与解构赋值结合,生成新数组
// const [first, ...rest] = [1, 2, 3, 4, 5, 6];//这种赋值方式,叫解构赋值而已
// console.log(first);
// console.log(rest)
//报错情况:将扩展运算符用于数组赋值,只能放在参数最后一位。
// const [...rest, first] = [1,2,3,4,5];
// console.log(rest);//Rest element must be last element
//将字符串转换为真正的数组
console.log([...'hello'])
//常用:将某些数据结构转换为数组
function fooFun(){
    const args = [...arguments];
    console.log(args)
};
fooFun(2,3,'a',{a:1, b:2, c:3},34)
// 用于替换es5中的Array.prototype.slice.call(arguments)写法。