JavaScript 展开运算符

本文详细介绍了JavaScript中的扩展运算符(...),包括用于数组合并、解构赋值、类数组转换、函数调用替代apply、对象合并及浅拷贝等场景。通过实例展示了其在日常开发中的实用性和注意事项,特别是浅拷贝特性可能导致的引用问题。
摘要由CSDN通过智能技术生成

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 } ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

火星飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值