展开运算符(...)

news2025/1/23 21:20:28

假如我们有一个数组:

const arr = [7,8,9];

● 我们如果想要数组中的元素,我们必须一个一个手动的去获取,如下:

const arr = [7,8,9];
const badNewArr = [5, 6, arr[0], arr[1],arr[2]];
console.log(badNewArr);

在这里插入图片描述

● 但是通过展开运算符就非常的方便

const arr = [7,8,9];
const badNewArr = [5, 6, arr[0], arr[1],arr[2]];
console.log(badNewArr);

const newArr = [5,6,...arr];
console.log(newArr);

在这里插入图片描述

● 当然,我们也可以通过展开运算符提取数组中的所有数据

console.log(...newArr);

在这里插入图片描述

● 还记得我们之前的对象么,如下所示

const restaurant = {
  name: 'Classico Italiano',
  location: 'Via Angelo Tavanti 23, Firenze, Italy',
  categories: ['Italian', 'Pizzeria', 'Vegetarian', 'Organic'],
  starterMenu: ['Focaccia', 'Bruschetta', 'Garlic Bread', 'Caprese Salad'],
  mainMenu: ['Pizza', 'Pasta', 'Risotto'],

  order: function (starterIndex, mainIndex) {
    return [
      restaurant.starterMenu[starterIndex],
      restaurant.mainMenu[mainIndex],
    ];
  },

  oderDelivery: function({starterIndex = 1, mainIndex = 0, time='20:00',address,}) {
    console.log(`Order received! ${this.starterMenu[starterIndex]} and ${this.mainMenu[mainIndex]} will be delivered to ${address} at ${time}`);
  },
};

● 例如现在我们现在菜单有所改变,我们在原来的基础上新增一个菜

const newMenu = [...restaurant.mainMenu, 'Gnocci'];
console.log(newMenu);

在这里插入图片描述

这样看起来展开运算符和解构是不是非常的相似;
解构和展开运算符是JavaScript中两种常用的操作符,它们在使用方式和功能上有一些区别。

  1. 用法不同:
    ○ 解构:解构语法可以从数组或对象中提取值,并将其赋给变量。解构通常用于从复杂的数据结构中提取所需的值。
    ○ 展开运算符:展开运算符则是用于将可迭代对象(如数组或字符串)展开为单独的元素,在创建新数组、合并对象属性或传递参数时非常有用。
  2. 应用场景不同:
    ○ 解构:解构经常用于从数组或对象中提取特定的值,使代码更简洁易读。例如,解构可以用于获取函数的参数,提取对象的属性等。
    ○ 展开运算符:展开运算符主要用于复制或合并数组和对象,创建新的数据结构。例如,展开运算符可以用于快速复制或合并数组,将多个对象的属性合并为一个新对象等。
  3. 语法使用不同:
    ○ 解构:解构使用花括号 {} 或方括号 [] 来指定提取的目标变量名,声明变量并将相应的值赋给它们。
    ○ 展开运算符:展开运算符使用三个连续的点 … 来表示,并放置在可迭代对象前面。
    综上所述,解构和展开运算符虽然在某些方面有一些相似之处,但它们的使用方式和应用场景是不同的。解构主要用于提取特定的值,而展开运算符则用于复制或合并数据。

应用场景

浅拷贝数组

const mainMenuCopy = [...restaurant.mainMenu];

合并2个数组

  const menu = [...restaurant.starterMenu,...restaurant.mainMenu];
  console.log(menu); 

可迭代对象、字符串、数组、maps、stes,NOT objects

 const str = 'Jonas';
  const letters = [...str, ' ', 'S.'];
  console.log(letters);

在这里插入图片描述

● 例如我们在对象中添加一段函数来读取意大利面的配料

 orderPasta: function(ing1,ing2,ing3) {
    console.log(`Here is your declicious pasta with ${ing1},${ing2},${ing3}`);
  }

● 接着我们来通过弹窗的方式来获取配料

const ingredients = [
    prompt("Let's make pasta! Ingredient 1?"),
    prompt('Ingredient 2?'),
    prompt('Ingredient 3?'),
  ];

  console.log(ingredients);

● 然后我们可以通过展开运算符来传参数到函数中

  restaurant.orderPasta(...ingredients)

在这里插入图片描述
在这里插入图片描述

● 对象的浅拷贝

 const newRestaurant = { foundedIn: 1998, ...restaurant, founder: 'Guiseppe'};
  console.log(newRestaurant);

在这里插入图片描述

● 但是这种拷贝是浅拷贝,不是深度拷贝

  const restaurantCopy = { ...restaurant};
  restaurantCopy.name = 'Ristorante Roma';
  console.log(restaurant.name);
  console.log(restaurantCopy.name);

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1268335.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机基础知识61

JsonResponse 功能例子 你自己写一个类,实现JsonResponse 功能,不需要传safeFalse,无论字典或列表,都能完成序列化返回给前端 1 响应头例子 四种情况,在响应头返回数据 xxxx # 第一种情况 JsonResponse def show(req…

软件测试项目大全,看你需要哪一个

软件测试是使用人工或者自动的手段来运行或者测定某个软件系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。 在软件投入使用前,要经过一系列的严格测试,才能保证交付质量。 一、引言 1.编写目的 本文档…

Nat. Mach. Intell. | 预测人工智能的未来:在指数级增长的知识网络中使用基于机器学习的链接预测

今天为大家介绍的是来自Mario Krenn团队的一篇论文。一个能够通过从科学文献中获取洞见来建议新的个性化研究方向和想法的工具,可以加速科学的进步。一个可能受益于这种工具的领域是人工智能(AI)研究,近年来科学出版物的数量呈指数…

Kong处理web服务跨域

前言 好久没写文章了,大概有半年多了,这半年故事太多,本文写不下,就写写文章标题问题! 问题描述 关于跨域的本质问题我这里不过多介绍,详细请看历史文章 跨域产生的原因以及常见的解决方案。 我这边是新…

对二分搜索的理解 Go语言版

二分搜索大家都很熟悉&#xff0c;首先我们先来看看基本框架 func binarySearch(nums []int, target int) int {left, right : 0, ...for ... {mid : left (right-left)/2if nums[mid] target {...} else if nums[mid] < target {left ...} else if nums[mid] > targ…

【Pytorch】Visualization of Feature Maps(4)——Saliency Maps

学习参考来自 Saliency Maps的原理与简单实现(使用Pytorch实现)https://github.com/wmn7/ML_Practice/tree/master/2019_07_08/Saliency%20Maps Saliency Maps 原理 《Deep Inside Convolutional Networks: Visualising Image Classification Models and Saliency Maps》&…

如何设置Linux终端提示信息

如何设置Linux终端提示信息 1 方法一&#xff1a;只能在VSCode或者Pycharm显示2 方法二&#xff1a;只能在MobaXterm等远程软件上显示&#xff0c;但全用户都会显示3 方法三&#xff1a;避免用户没看到上面的提示&#xff0c;上面两种都设置一下 在使用远程终端时&#xff0c;由…

基于Qt QChart和QChartView实现正弦、余弦、正切图表

# 源码地址 https://gitcode.com/m0_45463480/QChartView/tree/main# .pro QT += charts​​HEADERS += \ chart.h \ chartview.h​​SOURCES += \ main.cpp \ chart.cpp \ chartview.cpp​​target.path = $$[QT_INSTALL_EXAMPLES]/charts/zoomlinechartINSTAL…

L1-004:计算摄氏温度

题目描述 给定一个华氏温度F&#xff0c;本题要求编写程序&#xff0c;计算对应的摄氏温度C。计算公式&#xff1a;C5(F−32)/9。题目保证输入与输出均在整型范围内。 输入格式&#xff1a;输入在一行中给出一个华氏温度。 输出格式&#xff1a;在一行中按照格式“Celsius C”…

如何使用录屏软件在电脑录制PDF文件

我有一个PDF文件&#xff0c;想用录屏软件将它录制下来并添加上详细的注释&#xff0c;然后发给客户看&#xff0c;请问应该如何录制呢&#xff1f;有没有推荐的录屏软件呢&#xff1f; 不用担心&#xff0c;本文将会详细的为您讲解如何使用录屏软件在电脑端录制PDF文件&#…

GoLang切片

一、切片基础 1、切片的定义 切片&#xff08;Slice&#xff09;是一个拥有相同类型元素的可变长度的序列它是基于数组类型做的一层封装它非常灵活&#xff0c;支持自动扩容切片是一个引用类型&#xff0c;它的内部结构包含地址、长度和容量声明切片类型的基本语法如下&#…

Mac单独修改应用语言

方法1: 方法2: defaults write com.microsoft.Excel AppleLanguages ("zh-cn") defaults write com.microsoft.Word AppleLanguages ("zh-cn")参考&#xff1a;https://www.zhihu.com/question/24976020

Javaweb之Vue组件库Element案例的详细解析

4.4 案例 4.4.1 案例需求 参考 资料/页面原型/tlias智能学习辅助系统/首页.html 文件&#xff0c;浏览器打开&#xff0c;点击页面中的左侧栏的员工管理&#xff0c;如下所示&#xff1a; 需求说明&#xff1a; 制作类似格式的页面 即上面是标题&#xff0c;左侧栏是导航&…

vue高频面试题(2023),有回答思路,并且让你回答清晰

一、对MVC&#xff0c;MVP&#xff0c;MVVM的理解 三者都是项目的架构模式&#xff08;不是类的设计模式&#xff09;&#xff0c;即&#xff1a;一个项目的结构&#xff0c;如何分层&#xff0c;不同层负责不同的职责。 1、MVC&#xff1a; MVC的出现是用在后端&#xff08;…

SpringMVC—拦截器

1 拦截器概念 1.1 简介 拦截器是一种动态拦截方法调用的机制&#xff0c;在 SpringMVC 中动态拦截控制器方法的执行 【注】拦截器底层实现为AOP 作用&#xff1a; 在指定的方法调用前后执行预先设定的代码阻止原始方法的执行 1.2 拦截器和过滤器的区别 ① 归属不同&#…

高效的将两个文件夹中多余的文件删除

高效的将两个文件夹中多余的文件删除 解决方案 之前使用的是这个方法&#xff0c;但是图像太多&#xff0c;需要删除的有70W张&#xff0c;得删10多天。。 将两个文件夹中重复的图象删除 解决方案 先将image图像复制一份&#xff0c;然后改名为txt import osdef change_file…

SpringBoot——Swagger2 接口规范

优质博文&#xff1a;IT-BLOG-CN 如今&#xff0c;REST和微服务已经有了很大的发展势头。但是&#xff0c;REST规范中并没有提供一种规范来编写我们的对外REST接口API文档。每个人都在用自己的方式记录api文档&#xff0c;因此没有一种标准规范能够让我们很容易的理解和使用该…

【JavaWeb】会话过滤器监听器

会话&过滤器&监听器 文章目录 会话&过滤器&监听器一、会话1.1 Cookie1.2 Session1.3 三大域对象 二、过滤器三、监听器3.1 application域监听器3.2 session域监听器3.3 request域监听器3.4 session域的两个特殊监听器3.4.1 session绑定监听器3.4.2 钝化活化监听…

【Vulnhub 靶场】【Coffee Addicts: 1】【简单-中等】【20210520】

1、环境介绍 靶场介绍&#xff1a;https://www.vulnhub.com/entry/coffee-addicts-1,699/ 靶场下载&#xff1a;https://download.vulnhub.com/coffeeaddicts/coffeeaddicts.ova 靶场难度&#xff1a;简单 - 中等 发布日期&#xff1a;2021年5月20日 文件大小&#xff1a;1.3 …

SparkSQL远程调试(IDEA)

启动Intellij IDEA&#xff0c;打开spark源码项目&#xff0c;配置远程调试 Run->Edit Configuration 启动远程spark-sql spark-sql --verbose --driver-java-options "-Xdebug -Xrunjdwp:transportdt_socket,servery,suspendy,address5005"运行远程调试&#xf…