ES6新特性(基础常用)

简介: 文章介绍了ES6的常用新特性,包括let和const命令、对象解构赋值、模板字符串、Map和Set对象。通过示例代码详细解释了它们的用法和与传统ES5语法的区别,以及如何利用这些特性编写更简洁和高效的代码。

1.let const

let 声明的变量只在 let 命令所在的代码块内有效。

  //var 会造成变量穿透,如下
  for(var i = 0;i<10;i++){
   
      console.log(i);
  }
  console.log(i);//打印输出 i = 10,而原本在上面的循环中i只能到9

  for(let j = 0;j<10;j++){
   
      console.log(j);// 0-9
  }
  console.log(j);// ReferenceError: j is not defined

const 声明一个只读的常量,一旦声明,常量的值就不能改变。

 let a = "小明";
console.log(a);
 const PI = 3.14159;
 PI = 2.3;
 console.log(PI);//报错,常量不能修改 TypeError: Assignment to constant variable.

2.对象解构赋值

解构模型:解构源,解构目标
解构的源,解构赋值表达式的右边部分。
解构的目标,解构赋值表达式的左边部分。
var [ 目标 ] = { 源 }
数组解构

    //一维数组解构
    let nums = [1, 2, 3];
    let [a, b, c] = nums;
    console.log(a);//1
    console.log(b);//2
    console.log(c);//3
    //二维数组解构,嵌套解构,使用...rest相当于可变参数,解构剩下的
    let tNums = [[9, 8, 7], [6, 5, 4], [3, 2, 1]];
    let [[a00, a01, a02], ...rest] = tNums;
    console.log(a00);//9
    console.log(a01);//8
    console.log(a02);//7
    console.log(...rest);//[6, 5, 4] , [3, 2, 1]

字符串解构

    //字符串解构
    let str = "hello!";
    let [h,i,j,k,l,m] = str;
    console.log(h);//h
    console.log(i);//e
    console.log(j);//l
    console.log(k);//l
    console.log(l);//o
    console.log(m);//!

    //使用部分解构
    let [n,...rest2] = str;
    console.log(n); //h
    console.log(rest2); //['e', 'l', 'l', 'o', '!']

对象解构

    var name = "小白";
    var sex  ="男";
    var age =21;
    let person = {
   
        name,
        sex,
        age,
    };

    //传统取元素的方法 . 和 []
    console.log(person.name);    //小白    
    console.log(person.sex);     //男 
    console.log(person.age);    //21
    //es6的对象解构
    var {
   name,sex,age} =person;
    console.log(name); //小白
    console.log(sex); //男
    console.log(age); //21

    //对象解构例子
    let peoples = {
   p1:{
   name:"张三",age:34},p2:{
   name:"李四",age:33},p3:{
   name:"白云飞",age:18}};
    let {
    p1,p2,p3} = peoples;
    console.log(p1); //{name: '张三', age: 34}
    console.log(p2); //{name: '李四', age: 33}
    console.log(p3); //{name: '白云飞', age: 18}


    let {
   p: [x, {
    y }] }  = {
   p: ['hello', {
   y: 'world'}] };
    console.log(x);//hello
    console.log(y);//world

3.模板字符串

传统字符串拼接 ,首先字符串由 ""或者''包裹,然后用+来拼接。
es6提供的新的拼接方式 ,字符串由 ``来包裹,然后只需要使用${}来提取你所要的值进行拼接即可。

    //传统字符串拼接 
    var p1 = {
   name:"白云飞",age:18,id:"2020040411"};
    let str = "今天上课"+p1.name+"听的很认真!";
    console.log(str);
    //es6模板字符串拼接 
    let str2 = `今天上课${
     p1.name}听的很认真!`;
    console.log(str2);
    //在es6中模板字符串,回车换行也会被记录进去
    let str3 = `今天上课
                ${
     p1.name}
                 听的很认真!`;
    console.log(str3);

在这里插入图片描述

4.Map Set

Map对象

Map 对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。
Map 中的键值是有序的(FIFO 原则)先进先出==>队列,Map 的键值对个数可以从 size 属性获取。

map的set 和遍历

    let p1 = {
   name:"白云菲",age:20,sid:"040416"};
    let p2 = {
   name:"叶子君",age:21,sid:"040417"};
    let p3 = {
   name:"张三",age:22,sid:"040418"};
    let mapList = new Map();
    //以学号为key,学生信息为value压入map中
    mapList.set(p1.sid,p1);
    mapList.set(p2.sid,p2);
    mapList.set(p3.sid,p3);
    //Map迭代遍历
    // 1. for of
    for (let mapListElement of mapList) {
   
        console.log(mapListElement);
    };
    // 2.for each
    mapList.forEach(function (value, key) {
   
        console.log(key+"--");
        for (let e in value) {
   
            console.log(e+":"+value[e]);
        };
    });

for of遍历结果
在这里插入图片描述
for each遍历结果
在这里插入图片描述

map的合并和复制

map复制

//map的复制
 var map1 = new Map([["200102", "春"], ["200106", "夏"]]);
 var map2 = new Map(map1);
 for (let map2Element of map2) {
   
     console.log(map2Element);
 }

在这里插入图片描述
map合并

    var map1 = new Map([["200102", "春"], ["200106", "夏"]]);
    var map2 = new Map([["030311", "小白"], ["030316", "小飞"],["200106","小云"]]);
    var mapUnion = new  Map([...map2,...map1]);
    for (let mapUnionElement of mapUnion) {
   
        console.log(mapUnionElement);
    }
//注意合并时如果有重复的键,那么后面的会覆盖前面的 夏 覆盖 小云

在这里插入图片描述

Map和数组的转换

Map 构造函数可以将一个 二维 键值对数组转换成一个 Map 对象。
使用 Array.from 函数可以将一个 Map 对象转换成一个二维键值对数组。

 var arr1 = [["key1", "value1"], ["key2", "value2"]];
 // Map 构造函数可以将一个 二维 键值对数组转换成一个 Map 对象
 var map1= new Map(arr1);
 for (let map1Element of map1) {
   
     console.log(map1Element);
 }
 // 使用 Array.from 函数可以将一个 Map 对象转换成一个二维键值对数组
 var arr2 = Array.from(map1);
 console.log(arr2);

在这里插入图片描述

Set对象

Set 对象,不重复且无序,常用于数组的去重,取交集并集差集(和数学中的概念是一样的)。

set的去重,取并交差集

    var a = new Set([1,2,3,4,1,2]);
    console.log(a);// 1,2,3,4
    var b = new Set([5,6,7,8]);
    //将a,b两个一维数组合并为一个二维数组
    var union =new Set([...a,...b]);
    console.log(union);// 1, 2, 3, 4, 5, 6, 7, 8
    //取a,c的交集
    var c = new Set([1,2,6,4]);
    var interSet = new Set([...a].filter(x => c.has(x)));
    console.log(interSet);// 1 ,2 ,4
    //取a,c的差集
    var diffSet = new Set([...a].filter(x => !c.has(x)));
    console.log(diffSet);// 3
    //取c,a的差集
    var diffSet2 = new Set([...c].filter(x => !a.has(x)));
    console.log(diffSet2);// 6

在这里插入图片描述

--------------------------------------------------未完待续--------------------------------------------------

相关文章
|
10天前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
6天前
|
机器学习/深度学习 算法 大数据
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
2024“华为杯”数学建模竞赛,对ABCDEF每个题进行详细的分析,涵盖风电场功率优化、WLAN网络吞吐量、磁性元件损耗建模、地理环境问题、高速公路应急车道启用和X射线脉冲星建模等多领域问题,解析了问题类型、专业和技能的需要。
2506 14
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
|
6天前
|
机器学习/深度学习 算法 数据可视化
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
2024年中国研究生数学建模竞赛C题聚焦磁性元件磁芯损耗建模。题目背景介绍了电能变换技术的发展与应用,强调磁性元件在功率变换器中的重要性。磁芯损耗受多种因素影响,现有模型难以精确预测。题目要求通过数据分析建立高精度磁芯损耗模型。具体任务包括励磁波形分类、修正斯坦麦茨方程、分析影响因素、构建预测模型及优化设计条件。涉及数据预处理、特征提取、机器学习及优化算法等技术。适合电气、材料、计算机等多个专业学生参与。
1519 14
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
|
8天前
|
编解码 JSON 自然语言处理
通义千问重磅开源Qwen2.5,性能超越Llama
击败Meta,阿里Qwen2.5再登全球开源大模型王座
531 13
|
1月前
|
运维 Cloud Native Devops
一线实战:运维人少,我们从 0 到 1 实践 DevOps 和云原生
上海经证科技有限公司为有效推进软件项目管理和开发工作,选择了阿里云云效作为 DevOps 解决方案。通过云效,实现了从 0 开始,到现在近百个微服务、数百条流水线与应用交付的全面覆盖,有效支撑了敏捷开发流程。
19282 30
|
1月前
|
人工智能 自然语言处理 搜索推荐
阿里云Elasticsearch AI搜索实践
本文介绍了阿里云 Elasticsearch 在AI 搜索方面的技术实践与探索。
18836 20
|
1月前
|
Rust Apache 对象存储
Apache Paimon V0.9最新进展
Apache Paimon V0.9 版本即将发布,此版本带来了多项新特性并解决了关键挑战。Paimon自2022年从Flink社区诞生以来迅速成长,已成为Apache顶级项目,并广泛应用于阿里集团内外的多家企业。
17524 13
Apache Paimon V0.9最新进展
|
8天前
|
人工智能 自动驾驶 机器人
吴泳铭:AI最大的想象力不在手机屏幕,而是改变物理世界
过去22个月,AI发展速度超过任何历史时期,但我们依然还处于AGI变革的早期。生成式AI最大的想象力,绝不是在手机屏幕上做一两个新的超级app,而是接管数字世界,改变物理世界。
458 48
吴泳铭:AI最大的想象力不在手机屏幕,而是改变物理世界
|
1天前
|
云安全 存储 运维
叮咚!您有一份六大必做安全操作清单,请查收
云安全态势管理(CSPM)开启免费试用
355 4
叮咚!您有一份六大必做安全操作清单,请查收
|
2天前
|
存储 关系型数据库 分布式数据库
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
本文介绍了如何使用PolarDB、通义千问和LangChain搭建GraphRAG系统,结合知识图谱和向量检索提升问答质量。通过实例展示了单独使用向量检索和图检索的局限性,并通过图+向量联合搜索增强了问答准确性。PolarDB支持AGE图引擎和pgvector插件,实现图数据和向量数据的统一存储与检索,提升了RAG系统的性能和效果。