Advertisement

JavaScript 扩展运算符 “...“详解

阅读量:

一、什么是扩展运算符?

扩展运算符"…"是在ES6中引入的一种语法,它用于展开数组、对象或字符串。扩展运算符的主要作用是快速、简洁地实现对集合元素地操作。下文将介绍扩展运算符的几种基本用法。

二、扩展运算符的作用

1.遍历数组

复制代码
    	var arr=[1,2,3,4];
    	console.log(...arr); //1,2,3,4
    
    
    javascript
    
    

2.当作数组中的元素

复制代码
    	var arr=[1,2,3,4];
    	var arr1=[0,...arr];
    	console.log(...arr1);//0,1,2,3,4
    
    
    javascript
    
    

3.对数组进行深拷贝

扩展运算符可简洁地对数组 进行深拷贝(注意不是对数组元素 进行深拷贝),即改变原数组的内容后,拷贝的新数组内容不会随之改变。
先看数组的浅拷贝:拷贝了数组的地址

复制代码
    	var arr=[1,2,3,4];
    	var arr1=arr;
    	console.log(...arr1); //1 2 3 4
    	arr.push(5);
    	console.log(arr); //1 2 3 4 5
    	console.log(...arr1) //1 2 3 4 5
    
    
    javascript
    
    

在这里插入图片描述
可以看到,对原数组arr进行了操作之后,拷贝的数组arr1也进行了改变。下面演示用扩展运算符进行深拷贝(只改变了数组元素的值)。它将避免这个问题

复制代码
    	var arr=[1,2,3,4];
    	var arr1=[...arr];
    	console.log(...arr1); //1 2 3 4
    	arr.push(5);
    	console.log(...arr); //1 2 3 4 5
    	console.log(...arr1) //1 2 3 4
    
    
    javascript
    
    
在这里插入图片描述

4.函数的调用

1).作为实参

可利用扩展运算符进行实参的传递

复制代码
    	var arr=[1,2,3];
    	function fn(a,b,c,d){
    	console.log(a,b,c,d);
    }
    	fn(0,...arr);	//0 1 2 3
    
    
    javascript
    
    

2).作为形参

可利用扩展运算符进行形参的接收

复制代码
    	function fn(a,...rest){
    	console.log(a);	//0
    	console.log(...rest) //1 2 3
    }
    	fn(0,1,2,3);	
    
    
    javascript
    
    

5.与解构赋值结合使用

扩展运算符可以结合解构赋值使用,方便快捷,形式上类似数组的深拷贝。(解构赋值相关内容详见我发表的关于解构赋值的文章)

复制代码
    	var arr=[1,2,3];
    	var [x,y,z]=[...arr]
    	console.log(x,y,z)	//1 2 3
    
    
    javascript
    
    

6.将伪数组转化为真正的数组

伪数组是可遍历但不能调用数组中方法的对象,比如字符串,通过getElementbyClassName等获取的一堆dom对象,通过ajax返回的一些json对象等。下面将用字符串简单地进行演示。

复制代码
    	var str='将伪数组转化为数组';
    	console.log(Array.isArray(str)); //flase
    	var strArr=[...str];
    	console.log(strArr);	//(9) ['将', '伪', '数', '组', '转', '化', '为', '数', '组']
    	console.log(Array.isArray(strArr)); //true
    
    
    javascript
    
    

7.遍历对象

类似遍历数组(要写在花括号内)

复制代码
    	var obj={
    	name:'张三',
    	age:18,
    }
    	console.log({...obj}) //{name: '张三', age: 18}
    
    
    javascript
    
    

8.对象的深拷贝

类似数组的深拷贝,改变原对象后,拷贝的对象不会被改变

复制代码
    	var obj={
    		name:'张三',
    		age:18,
    	}
    	var obj_1={...obj};
    	delete obj.age;
    	console.log(obj);
    	console.log(obj_1);
    
    
    javascript
    
    
在这里插入图片描述

9.对象的合并

类似第2点,用扩展运算符也可以当作对象中的元素,即对象的合并。若合并的数组中有与原数组相同的key,则按书写顺序进行value的覆盖。后写覆盖先写的

复制代码
    	var a={
      	  a:1,
      	  c:3
    	}
    	var b={
    	    ...a,
     	   b:2,
     	   c:1,
    	}
    	console.log(b) //{a: 1, c: 1, b: 2}
    
    
    javascript
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-07-14/qh9FJi4PaLmOYMNcn0bC76SQWV3G.png)

全部评论 (0)

还没有任何评论哟~