...array 代表将一个数组转为用逗号分隔的参数序列还可以将字符串转为真正的数组。。
[...'hello']
// [ "h", "e", "l", "l", "o" ]
function add(x, y) {
return x + y;
}
const numbers = [4, 38];
add(...numbers) // 42
求出一个数组最大元素的写法。
Math.max(...[14, 3, 77])
两个数组合并成一个。push
let arr1 = [0, 1, 2];
let arr2 = [3, 4, 5];
arr1.push(...arr2);
合并多个数组
// ES5 的合并数组
arr1.concat(arr2, arr3);
// [ 'a', 'b', 'c', 'd', 'e' ]
// ES6 的合并数组
[...arr1, ...arr2, ...arr3]
取出参数对象的所有可遍历属性,拷贝到当前对象之中。但是注意下面的例子z==n结果是false
let z = { a: 3, b: 4 };
let n = { ...z }; //n={ a: 3, b: 4 }
对象是不能使用==判断是否相等的。他们的地址指向是不同的会被认为不相等
let z = { a: 3, b: 4 };
let aClone = { ...z}; 等同于
let aClone = Object.assign({}, z);
let a = { m: 1 };
let aWithOverrides = { ...a, x: 1, y: 2 };
// 等同于
let aWithOverrides = { ...a, ...{ x: 1, y: 2 } };
// 等同于
let x = 1, y = 2, aWithOverrides = { ...a, x, y };
// 等同于
let aWithOverrides = Object.assign({}, a, { x: 1, y: 2 });他们的结果都是{m:1,x:1,y:2}
但是如果a的对象属性里面也有x或者y.那么同名的属性就会被后面的覆盖掉
let a={m:1,x:9}
let b={...a,...{x:2}} //b的结果是{m:1,x:2}
这用来修改现有对象部分的部分属性就很方便了。
let newobject={
...object,
value: newvalue //这里会覆盖object里面的vaule值相当于修改了他的value值并把结果赋值给了newobject
}