js中...的用法
创始人
2025-05-29 11:29:12
0

参考文章:https://blog.csdn.net/alwyn0721/article/details/127256831

三点是es6中出现的扩展运算符。作用是遍历当前使用的对象能够访问到的所有属性,并将属性放入当前对象中。存在一个问题,重名了怎么办,当重名的时候将会选取后者。

扩展运算符的用法还有其他值得注意的地方,下面的例子可以很好的演示:

var a = {"a":"a","b":"b"}
var b = {...a} //{"a":"a","b":"b"}
var c = {...a,"b":"b1"} //{"a":"a","b":"b1"}
var d = {...a,...{"a":"a1","b":"b1"}} //{"a":"a1","b":"b1"}console.log(a)
console.log(b)
console.log(c)
console.log(d)

1.含义:展开运算符(spread operator)和剩余运算符(rest operator)

展开运算符

展开运算符允许迭代器在接收器内部分别展开或扩展。迭代器和接收器可以是任何可以循环的对象,例如数组、对象、集合、映射等。你可以把一个容器的每个部分分别放入另一个容器。

const newArray = ['first', ...oldArray]

剩余参数

剩余参数语法允许我们将无限数量的参数表示为数组。命名参数的位置可以在剩余参数之前

const func = (first, second, ...rest) => {}

2.用法:

2.1 复制数组

const fruits = ['apple', 'orange', 'banana'];
const fruitsCopied = [...fruits]; // ['apple', 'orange', 'banana']console.log(fruits);
console.log(fruitsCopied);

2.2 复制对象

复制的工作方式与数组相同。

const todo = { name: 'Clean the dishes' };
const todoCopied = { ...todo }; // { name: 'Clean the dishes' }
console.log(todo); 
console.log(todoCopied); 

2.3 去重

Set 对象仅存储唯一的元素,并且可以用数组填充。它也是可迭代的,因此我们可以将其展开到新的数组中,并且得到的数组中的值是唯一的。

const fruits = ['apple', 'orange', 'banana', 'banana'];
const uniqueFruits = [...new Set(fruits)]; // ['apple', 'orange', 'banana']
console.log(fruits); 
console.log(uniqueFruits); 

2.4 串联数组

const fruits = ['apple', 'orange', 'banana'];
const vegetables = ['carrot'];
const fruitsAndVegetables1 = [...fruits, ...vegetables]; // ['apple', 'orange', 'banana', 'carrot']
const fruitsAndVegetables2 = ['carrot', ...fruits]; // ['carrot', 'apple', 'orange', 'banana']console.log(fruitsAndVegetables1); 
console.log(fruitsAndVegetables2); 

2.5 将参数作为数组进行传递

const mixer = (x, y, z) => console.log(x, y, z);
const fruits = ['apple', 'orange', 'banana'];
console.log(fruits); mixer(...fruits); // 'apple', 'orange', 'banana'

2.6 将参数转化为数组

JavaScript 中的参数是类似数组的对象。你可以用索引来访问它,但是不能调用像 map、filter 这样的数组方法。参数是一个可迭代的对象,那么我们做些什么呢?在它们前面放三个点,然后作为数组去访问!

const mixer = (...args) => console.log(args);
mixer('apple'); // ['apple']

2.7 数组切片

展开运算符也可以做到,但是必须一个一个去命名其余的元素

const fruits = ['apple', 'orange', 'banana'];
const [apple, ...remainingFruits] = fruits; // ['orange', 'banana']
console.log(fruits);
console.log(remainingFruits);

2.8 合并对象

合并的唯一区别是具有相同键的属性将被覆盖。最右边的属性具有最高优先级。

const todo = { name: 'Clean the dishes' };
const state = { completed: false };
const nextTodo = { name: 'Ironing' };
const merged = { ...todo, ...state, ...nextTodo }; // { name: 'Ironing', completed: false }
console.log(merged);

2.9 字符串拆分成字符

可以用展开运算符把字符串拆分为字符。当然,如果用空字符串调用 split 方法也是一样的

const country = 'USA';
console.log(country);
console.log([...country]); // ['U', 'S', 'A']

相关内容

热门资讯

徐志摩的诗歌四大特点 徐志摩的诗歌四大特点  徐志摩是新月派的代表诗人。真挚地独抒性灵、追求个性解放是徐志摩诗歌的基本艺术...
顾城:来源诗歌 顾城:来源诗歌  在平凡的学习、工作、生活中,大家总免不了要接触或使用诗歌吧,诗歌是用高度凝练的语言...
中华古典诗词 中华古典诗词  诗词,是指以古体诗、近体诗和格律词为代表的中国汉族传统诗歌。亦是汉字文化圈的特色之一...
mysql8操作语句 mysql8操作语句一、DDL-数据定义语言1.1、数据库操作1.1.1、查询所有数据库1.1.2、...
父亲节小班诗歌 父亲节小班诗歌(精选6首)  在日常学习、工作或生活中,大家都收藏过令自己印象深刻的诗歌吧,不同的诗...
【Go进阶训练营】内存分配原理 前言 上一篇,我介绍了一下Go的垃圾回收原理,补一下对象的内存是如何分配...
centos7上安装mysql... 1、首先把自己的账户切换到root账户 [root@localhost ~]# su roo...
经典现代诗歌 经典现代诗歌(通用15首)  在平凡的学习、工作、生活中,许多人都接触过一些比较经典的诗歌吧,诗歌语...
大海的现代诗歌 大海的现代诗歌(精选12首)  诗歌,是一种抒情言志的文学体裁。是用高度凝练的语言,生动形象地表达作...
迎新年的诗歌朗诵稿 迎新年的诗歌朗诵稿(通用5篇)  在我们上学期间,大家都听说过或者使用过一些比较经典的朗诵稿吧,朗诵...
《母亲》诗歌 《母亲》诗歌三首  一  母亲的眼泪是心头的血涌  岁月磨砺成对儿子最直白的依靠  数着日子盼儿子回...
ACSC Quals 2023... 题目下载地址: https://pan.baidu.com/s/1sD2OhS5asS...
数据结构之二叉树构建、广度/深... 一、二叉树 1.1 树 说到树,我们暂时忘记学习,来看一下大自然的树&#...
Fortran学习:chapt... 1.数组 1.1声明数组 数组的声明方法:Datatype name(size)&#...
中国现代诗歌 中国现代诗歌(精选12首)  在日常学习、工作或生活中,大家都听说过或者使用过一些比较经典的诗歌吧,...
五月,在枝头上眺望激情的诗歌 五月,在枝头上眺望激情的诗歌  我和你,在阳光的朝夕里面,在色彩浓艳里叙说真情  明白了什么叫做“万...
现代诗大全   诗歌,用高度凝练的语言,形象表达作者丰富情感。下面就让我们欣赏一下这些优美的诗歌吧。  1、《再...
曹操的诗以什么见称? 曹操是汉末杰出的文学家和建安文学新局面的开创者.通读曹公诗歌 ,可以体会到其中包含着丰富的思想内蕴 ...
区块链系统:点对点交易原理 比特币的交易是一种无需信任中介参与的P2P(Peer-to-peer)交...
夜宿翠峰寺诗歌鉴赏 夜宿翠峰寺诗歌鉴赏  诗曰:风起仙峰动,雨吟禅境幽,《福建中青年诗词选》读后感言之浅析姜才棠先生《夜...