js扩展运算符

本文详细介绍了JavaScript中的扩展运算符,包括在数组复制、数组合并、对象复制与合并以及作为函数参数时的应用。通过实例展示了如何使用扩展运算符进行深复制、合并操作,并探讨了其在对象复制时处理相同键值对的规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是扩展运算符?
答: 这个东西 -> …
那它有什么用?(往下瞅)

一、数组复制

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

像这里这么使用,输出的arr1数组将会和arr数组完全一样
在这里插入图片描述


但是这里是深复制还是浅复制呢?

let arr = [1, 2, 3, 4];
let arr1 = [...arr];
arr[0] = 9;
console.log(arr, arr1);

控制台输出结果:
在这里插入图片描述
显然,改变arr的值后,arr1的值并没有被改变,所以是深复制


二、数组合并

let arr = [1, 2, 3, 4];
let arr1 = [5, 6, 7, ...arr];
console.log(arr1);

在这里插入图片描述
像这种属于按位置插入式合并


其实更像合并的是:

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

在这里插入图片描述
是不是突然感觉好实用?

等会还没完!!!


举个常见的栗子:

对于数组去重问题(去掉数组中所有相同的元素),我们可以用Set方法来实现。

一般情况下我们会这样:

function fun(arr){
	return Array.from(new Set(arr));
}

这里Set负责去重,Array.from负责将Set类数组转换为数组。

如果我们用扩展运算符的话就更简洁了:

function fun(arr){
	return [...new Set(arr)];
}

这样就用 … 转化类数组了。


三、对象复制与合并

let obj = {
	name: 'zs',
	age: 18
}
let obj1 = {
	school: 'hgc',
	...obj
}
console.log(obj1);

在这里插入图片描述
这样就把obj的内容全都复制到obj里面了。


但是如果有相同的key呢?

let obj = {
	name: 'zs',
	age: 18
}
let obj1 = {
	age: 20,
	...obj
}
console.log(obj1);

在这里插入图片描述
这里是复制过来key的覆盖的了现有的key
是不是顺序的问题呢?
我们换个顺序

let obj = {
	name: 'zs',
	age: 18
}
let obj1 = {
	...obj,
	age: 20
}
console.log(obj1);

在这里插入图片描述
果然是这样的,所以…的作用真的就是把整个对象的键值对插到了对应位置。


那么对象可不可以像数组那样进行多个扩展运算符的复制插入呢?

let obj1 = {
	name: 'zs',
	age: 18
}
let obj2 = {
	from: 'China',
	sex: 'male'
}
let obj3 = {
	...obj1,
	...obj2
}
console.log(obj3);

在这里插入图片描述
可以熬,而且是按顺序来的,也就是如果有相同的key,后边的就会覆盖前面的。

四、作为函数参数

function foo(...args) {
	console.log(args);
	console.log(arguments);
	console.log(args[0]);
	console.log(arguments[0]);
}
foo(1, 2, 3, 4);

看看和arguments的差别
在这里插入图片描述
很显然,只是少了一些arguments的方法,在表值上没什么差别。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值