ES6之 变量的解构赋值 ➕ 扩展运算符(…)

news/2024/7/11 0:55:26 标签: es6, javascript, 开发语言

ES6之 变量的解构赋值 ➕ 扩展运算符

  • 1. 变量的解构赋值
  • 2. 扩展运算符
    • 2.1 简介(官网)
    • 2.2 应用例子
      • 2.2.1 简单例子1
      • 2.2.2 数组拷贝
      • 2.2.3 连接多个数组
      • 2.2.4 拷贝对象(多层和多维数组一样)
      • 2.2.5 合并对象
      • 2.2.6 关于展开对象(jsx)

1. 变量的解构赋值

  • 一看就懂,代码如下:

    javascript"><script>
        console.log("=======1.数组的解构=======");
    
        const DOG_NAMES = ['麦兜','泡泡','贝塔'];
        let [mai,pao,bei] = DOG_NAMES;
    
        console.log(mai); //麦兜
        console.log(pao); //泡泡
        console.log(bei); //贝塔
    
    
        console.log("\n\n\n\n=======2.对象的解构=======");
    
        const dog_1 = {
            dogName:'麦兜',
            dogAge:3,
            dogKind:'边牧',
            dogSex:'女',
            dogPlayGames:function(){
                console.log('狗狗超级爱玩球。。。。');
            }
        }
        /**
         * a. 对象解构的时候,属性名要和上面声明的对象里的属性名一致
         * b. 即:相当于声明了几个变量,并对新声明的变量进行了赋值
         */
        let {dogName,dogAge,dogPlayGames} = dog_1;
        
        console.log(dogName);
        console.log(dogAge);
    
        // dog_1.dogPlayGames();
        dogPlayGames();
    
    </script>
    
  • 效果如下:
    在这里插入图片描述

2. 扩展运算符

2.1 简介(官网)

  • 什么是扩展运算符(…运算符)?
    就是展开语法 (Spread syntax), 可以在函数调用/数组构造时,将数组表达式或者 string 在语法层面展开;还可以在构造字面量对象时,将对象表达式按 key-value 的方式展开。(译者注: 字面量一般指 [1, 2, 3] 或者 {name: “mdn”} 这种简洁的构造方式)。
  • 参考官网:
    官网-展开语法.

2.2 应用例子

2.2.1 简单例子1

  • 代码如下:
    javascript"><script>
        function sum_1(x,y,z){
            console.log(arguments);
            return x + y + z;
        }
    
        const numbers = [1,2,3];
        let result_1 = sum_1(...numbers);//等价于 let result_1 = sum_1(1,2,3);
        console.log('result_1--->'+result_1);
    </script>
    
  • 效果如下:
    在这里插入图片描述

2.2.2 数组拷贝

  • 代码如下:
    javascript"> var arr_1 = ['麦兜','贝塔','泡泡'];
     var arr_2 = [...arr_1]; //数组拷贝
     console.log(arr_2);
    
     arr_2.push('西瓜');
     console.log(arr_2);
    
  • 效果如下:
    在这里插入图片描述
  • 需要注意的是:
    • 扩展运算符拷贝的是,浅拷贝 (只遍历一层)
      在这里插入图片描述
    • 再来个例子说明:
      在这里插入图片描述

2.2.3 连接多个数组

  • 函数写法
    javascript"> let dogs = ['麦兜','贝塔','泡泡'];
     let cats = ['猫咪1','猫咪2'];
    
     let pets_1 = dogs.concat(cats); //使用函数 concat 连接
    
  • 扩展运算符写法
    javascript">let pets_2 = [...dogs,...cats]; //使用扩展运算符连接
    
  • 效果如下:
    在这里插入图片描述

2.2.4 拷贝对象(多层和多维数组一样)

  • 代码如下:

    javascript">console.log('\n\n\n\n=============拷贝对象===========');
    
    let user_1 = {name:'小花',age:18};
    
    let user_2 = {...user_1};
    user_2.name = '小明';
    
    console.log(user_1);
    console.log(user_2);
    
    console.log('\n\n\n\n=============拷贝对象多层===========');
    
    let pserson_1 = {
        name:'小花',
        age:18,
        schoolInfo:{
            schoolId:1001,
            schoolName:'XXX第一高级中学'
        }
    }
    let person_2 = {...pserson_1};
    person_2.name = '小刚';
    person_2.schoolInfo.schoolName = '第二中学';
    
    console.log(pserson_1);
    console.log(person_2);
    
  • 效果如下:
    在这里插入图片描述

2.2.5 合并对象

  • 第一种写法:
    javascript">let school_1 = {name:'北京大学',address:'北京'};
    let school_2 = {...school_1,name:'清华大学',createDate:'1911'}; //在copy时,修改属性以及添加属性
    
    在这里插入图片描述
  • 第二种写法:
    javascript">var obj1 = { foo: "bar", x: 42 };
    var obj2 = { foo: "baz", y: 13 };
    
    var mergedObj = { ...obj1, ...obj2 };
    // 合并后的对象:{ foo: "baz", x: 42, y: 13 }
    
    在这里插入图片描述

2.2.6 关于展开对象(jsx)

  • 单独使用原生 js 的话,对象是不能通过扩展运算符进行展开的。
  • 可以通过 jsxbabel )来展开:
    • 代码如下:
      在这里插入图片描述
      javascript"><script type="text/babel">
          //1. 创建组件
          class DogComponent extends React.Component{
              render(){
      
                  const {dogName,dogAge,dogKind,dogDesc} = this.props;//对象的解构赋值
      
                  return(
                      <ul>
                          <li>姓名:{dogName}</li>
                          <li>年龄:{dogAge}</li>
                          <li>种类:{dogKind}</li>
                          <li>备注:{dogDesc}</li>
      
                          <li>备注-2{this.props.dogDesc}</li>
                      </ul>
                      
                  )
              }
          }
      
          //2. 定义对象
          const dog ={
              dogName:'麦兜',
              dogAge:3,
              dogKind:'边牧',
              dogDesc:'温柔、撒娇、粘人、偶尔调皮~'
          }
      
          //3. 渲染组件到页面
          ReactDOM.render(<DogComponent {...dog}/>,document.getElementById('dog'));
      
      </script>
      
    • 效果如下:
      在这里插入图片描述

http://www.niftyadmin.cn/n/5009635.html

相关文章

同旺科技USB to I2C 适配器烧写 Arduino 模块

所需设备&#xff1a; 内附链接 1、同旺科技USB to I2C 适配器 2、Arduino 模块 硬件连接&#xff1a; 用同旺科技USB to I2C 适配器连接芯片的TX、RX、GND; 打开Arduino IDE编辑工具&#xff0c; 点击“上传”按钮&#xff0c;完成程序的编译和烧录&#xff1b;

获取 Linux Standard Base (LSB) 版本信息

lsb_release 是一个在 Linux 系统中用来获取 Linux Standard Base (LSB) 版本信息的工具。而 “LSB”&#xff08;Linux Standard Base&#xff09;是一个定义了标准的 Linux 系统的核心接口的项目。这个标准是由 Linux 基金会赞助的&#xff0c;旨在增加应用程序的可移植性并降…

喜讯 | 智安零信任安全项目入选信通院“安全守卫者计划”优秀案例

近日&#xff0c;中国信息通信研究院&#xff08;以下简称“中国信通院”&#xff09;主办的首届“SecGo云和软件安全大会”成功举办&#xff0c;会上重磅揭晓了“安全守卫者计划 零信任”优秀案例征集活动结果&#xff0c;深圳市智安网络有限公司与大庆油田信息技术公司联合申…

【SpringCloudAlibaba】Seata分布式事务使用

文章目录 分布式事务问题示例Seata概述、官网一个典型的分布式事务过程处理过程全局GlobalTransactional分布式交易解决方案流程图 Seata安装下载修改conf目录下的application.yml配置文件dashboard demo 分布式事务问题示例 单体应用被拆分成微服务应用&#xff0c;原来的三个…

算法训练营第四十四天(9.6)| 动态规划Part17

目录 Leecode 647.回文子串 Leecode 516.最长回文子序列 Leecode 647.回文子串 题目地址&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目类型&#xff1a;回文 class Solution { public:int countSubstrings(string s) {int n s.si…

K8S之使用yaml格式定义pod

mysql-pod.yaml # overView: # 1. web服务与db打包放在同一个pod中&#xff0c;本地通过localhost来访问&#xff0c;并附带存活性/可用性检测 # 2. 补充重启策略/镜像拉去策略 # 3. 对容器资源进行限制apiVersion: apps/v1 kind: Pod metadata:name: pub-oanamespace: hunte…

ARM DIY(十)LRADC 按键

前言 ARM SOC 有别于单片机 MCU 的一点就是&#xff0c;ARM SOC 的 GPIO 比较少&#xff0c;基本上引脚都有专用的功能&#xff0c;因为它很少去接矩阵键盘、众多继电器、众多 LED。 但有时 ARM SOC 又需要三五个按键&#xff0c;这时候 LRADC 就是一个不错的选择&#xff0c;…

理解项目开发(寺庙小程序)

转载自&#xff1a;历经一年&#xff0c;开发一个寺庙小程序&#xff01; (qq.com) 破防了&#xff01;为方丈开发一款纪念小程序&#xff01; (qq.com) 下面内容转载自&#xff1a;程序员5K为青岛啤酒节开发个点餐系统&#xff01; (qq.com) 看一个人如何完成一个项目的开发…