JavaScript 展开运算符

1. 合并数组

let arr1 = [1, 2, 3];
let arr2 = [4, 5, 6];
let arr3 = [...arr1, ...arr2];
console.log(arr3); // [ 1, 2, 3, 4, 5, 6 ]

2. 数组解构赋值

let [arr1, ...arr2] = [1, 2, 3, 4, 5];
console.log(arr1); // 1
console.log(arr2); // [ 2, 3, 4, 5 ]

3. 将类数组或可遍历对象转换为真正的数组

// 这里取到的oDivs是类数组(有length属性)
let oDivs = document.getElementsByTagName('div');
console.log(Array.isArray(oDivs)); // false
// 转化为真正的数组
oDivs = [...oDivs];
console.log(Array.isArray(oDivs)); // true

4. 替代apply()

let arr = [1, 2];
function sum(a, b) {
    console.log(a + b);
}
// 下面两行结果相同
sum.apply(null, arr); // 3
sum(...arr); // 3

5. 合并对象

const obj1 = { a: 1, b: 2 };
const obj2 = { c: 3, d: 4 };
const obj3 = { ...obj1, ...obj2 };
console.log(obj3); // { a: 1, b: 2, c: 3, d: 4 }

6. 对象解构赋值

const obj1 = { a: 1, b: 2 };
const obj2 = { c: 3, d: 4 };
const obj3 = { ...obj1, ...obj2 };
console.log(obj3); // { a: 1, b: 2, c: 3, d: 4 }

7. 数组、对象浅拷贝

用扩展运算符对数组或者对象进行拷贝时,是浅拷贝。只能扩展和深拷贝第一层的值,对于第二层极其以后的值,扩展运算符将不能对其进行打散扩展,也不能对其进行深拷贝,即拷贝后和拷贝前第二层中的对象数组仍然引用的是同一个地址,其中一方改变,另一方也跟着改变。

const a = [{ a: 1 }, { b: 2 }, { c: 3 }];
const b = [...a];
a[0].a = 0;
console.log(a); // [ { a: 0 }, { b: 2 }, { c: 3 } ]
console.log(b); // [ { a: 0 }, { b: 2 }, { c: 3 } ]
上一篇:d27网络编程


下一篇:mysql 创建数据库 添加用户 数据库授权给某用户