最全的—— ES6有哪些新特性?

article/2025/11/10 18:32:40

目录

  • ES6新特性
    • 1、let和const
    • 2、symbol
    • 3、模板字符串
      • 3.1 字符串新方法(补充)
    • 4、解构表达式
      • 4.1 数组解构
      • 4.2 对象解构
    • 5、对象方面
      • 5.1 Map和Set
        • 5.1.1 Map
        • 5.1.2 Set
      • 5.3 数组的新方法
        • 5.3.1 Array.from()方法
        • 5.3.2 includes()方法
        • 5.3.3 map()、filter() 方法
        • 5.3.4 forEach()方法
        • 5.3.4 find()方法
        • 5.3.6 some()、every() 方法
      • 5.4 object的新方法
        • 5.4.1 Object.is()
        • 5.4.2 Object.assign()
        • 5.4.3 Object.keys()、Object.values()、Object.entries()
      • 5.5 对象声明简写
      • 5.6 ...(对象扩展符)
    • 6、函数方面
      • 6.1 参数默认值
      • 6.2 箭头函数
      • 6.3 箭头函数和普通函数最大的区别在于其内部this永远指向其父级对象的this。(重点)
    • 7、class(类)
    • 8、promise和proxy
    • 9、模块化
    • 10、运算符
  • 总结——ES6思维导图


若本文对你有帮助 点个赞 点个关注


ES6新特性

1、let和const

前面讲过:https://blog.csdn.net/ZLJ_999/article/details/123960186

2、symbol

Symbol是ES6中引入的一种新的基本数据类型,用于表示一个独一无二的值,不能与其他数据类型进行运算。它是JavaScript中的第七种数据类型,与undefined、null、Number(数值)、String(字符串)、Boolean(布尔值)、Object(对象)并列。

你可以这样创建一个Symbol值:

const a = Symbol();
console.log(a);  //Symbol()//因为Symbol是基本数据类型,而不是对象,不能 new 。
const a = new Symbol();//报错,Symbol is not a constructor

使用Symbol()创建一个Symbol类型的值并赋值给a变量后,你就得到了一个在内存中独一无二的值。现在除了通过变量a,任何人在任何作用域内都无法重新创建出这个值

const a = Symbol();
const b = Symbol();

内存解构图
在这里插入图片描述

3、模板字符串

  • 在ES6之前,处理模板字符串:
    通过“\”和“+”来构建模板
  • 对ES6来说:
    ${}来界定;
    反引号(``)直接搞定;
<script>url="xxxxxx"// es6之前let html="<div>"+" <a>"+url+"</a>"+"</div>";//es6let eshtml=`<div><a>${url}</a></div>`
</script>

非常好用

3.1 字符串新方法(补充)

  • includes()判断字符串是否包含参数字符串,返回boolean值。
  • startsWith() / endsWith(),判断字符串是否以参数字符串开头或结尾。返回boolean值。这两个方法可以有第二个参数,一个数字,表示开始查找的位置。
let str = 'blue,red,orange,white';str.includes('blue');//true
str.startsWith('blue');//true
str.endsWith('blue');//false
  • repeat()方法按指定次数返回一个新的字符串。
console.log('hello'.repeat(2));   //'hellohello'
  • padStart()/padEnd(),用参数字符串按给定长度从前面或后面补全字符串,返回新字符串。
let arr = 'hell';
console.log(arr.padEnd(5,'o'));  //'hello'
console.log(arr.padEnd(6,'o'));  //'helloo'
console.log(arr.padEnd(6));  //'hell  ',如果没有指定将用空格代替console.log(arr.padStart(5,'o'));  //'ohell'

4、解构表达式

解构赋值是对赋值运算符的扩展。它是一种针对数组或者对象进行模式匹配,然后对其中的变量进行赋值。
字符串、以及ES6新增的MapSet 都可以使用解构表达式

4.1 数组解构

let [a,b,c] = [1,2,3];
console.log(a,b,c);    //1,2,3let [a,b,c] = [1,,3];
console.log(a,b,c);    //1,undefined,3let [a,,b] = [1,2,3];
console.log(a,b);//1,3let [a,..b] = [1,2,3];  //...是剩余运算符,表示赋值运算符右边除第一个值外剩余的都赋值给b
console.log(a,b);//1,[2,3]

4.2 对象解构

对象的解构赋值和数组类似,不过左边的变量名需要使用对象的属性名,并且用大括号{}而非中括号[]

let obj = { name: "ren", age: 12, sex: "male" 
};let { name, age, sex } = obj;
console.log(name, age, sex); //'ren' 12 'male'let { name: myName, age: myAge, sex: mySex } = obj; //自定义变量名
console.log(myName, myAge, mySex); //'ren' 12 'male'

5、对象方面

5.1 Map和Set

Map和Set属于es6新增加的对象

5.1.1 Map

Map对象用于保存键值对,任何值JavaScript支持的值都可以作为一个键(key)或者一个值(value)。
与对象不同的是

  1. object的键只能是字符串或ES6的symbol值,而Map可以是任何值。
  2. Map对象有一个size属性,存储了键值对的个数,而object对象没有类似属性。
let myMap = new Map([['name','ren'],['age',12]]);
console.log(myMap);  //{'name'=>'ren','age'=>12}myMap.set('sex','male');
console.log(myMap);  //{'name'=>'ren','age'=>12,'sex'=>'male'}
console.log(myMap.size);  //3myMap.get('name');  //'ren'
myMap.has('age');  //true
myMap.delete('age');  //true
myMap.has('age');  //false
myMap.get('age');  //undefined

5.1.2 Set

可以理解为后端的Set集合对象
Set对象和Map对象类似,但它存储不是键值对。类似数组,但它的每个元素都是唯一的

let mySet = new Set([1,2,3]);//里面要传一个数组,否则会报错
console.log(mySet);  //{1,2,3}mySet.add(4);
console.log(mySet);  //{1,2,3,4}mySet.delete(1);  //true
mySet.has(1);  //false
console.log(mySet);  //{2,3,4}

利用Set对象唯一性的特点,可以轻松实现数组的去重

let arr = [1,1,2,3,4,4];let mySet = new Set(arr);let newArr = Array.from(mySet);
console.log(newArr);  //[1,2,3,4]

5.3 数组的新方法

  • 新增的方法有:
  1. Array.from()是内置对象Array的方法,实例数组不能调用
  2. includes() 参数:数值 -------- 返回值:true/false
  3. map()filter() 参数:函数-------- 返回值:数组
  4. forEach() 参数:函数-------- 返回值:undefined
  5. find() 参数:函数-------- 返回值:数值
  6. some()every() 参数:函数-------- 返回值:true/false

5.3.1 Array.from()方法

Array.from()方法可以将可迭代对象转换为新的数组。

  • 函数可接受3个参数(后两个参数可以没有):
    • 第一个表示将被转换的可迭代对象(如果只有一个参数就是把形参转变成数组)
    • 第二个是回调函数,将对每个数组元素应用该回调函数,然后返回新的值到新数组,
    • 第三个是回调函数内this的指向。
let arr = [1, 2, 3];
let obj = {double(n) {return n * 2;}
}
console.log(Array.from(arr, function (n){return this.double(n);
}, obj)); // [2, 4, 6]

5.3.2 includes()方法

参数:数值 -------- 返回值:true/false
includes()方法------是查看数组中是否存在这个元素,存在就返回true,不存在就返回false

let arr = [1,33,44,22,6,9]
let ary = arr.includes(22)
console.log(ary)

5.3.3 map()、filter() 方法

参数:函数-------- 返回值:数组
map()方法-----要利用原数组经过运算后的数组,或者从对象数组中拿某个属性
filter()方法------是将符合挑选的筛选出来成为一个新数组,新数组不会影响旧数组。

<script>let arr = [1, 33, 44, 2, 6, 9];let newarr1 = arr.filter((v) => v > 10); //newarr1-------[33, 44]let newarr2 = arr.filter((v) => v * 2);  //newarr2-------[1, 33, 44, 2, 6, 9]let newarr3 = arr.map((v) => v > 10);    //newarr3-------[false, true, true, false, false, false]let newarr4 = arr.map((v) => v * 2);     //newarr4-------  [2, 66, 88, 4, 12, 18]
</script>

5.3.4 forEach()方法

参数:函数-------- 返回值:undefined

forEach() 方法------是循环遍历数组中的每一项,没有返回值

find()方法---------是查找数组中符合条件的第一个元素,直接将这个元素返回出来

let arr = [1,33,44,2,6,9]
let a1= []
arr.forEach((v, i)=>{if (v > 10) {a1.push(arr[i])}  
})
console.log(a1) [33,44]let a2= arr.find(v => v > 10)
console.log(a2)

5.3.4 find()方法

参数:函数-------- 返回值:数值

find()方法----------是查找数组中符合条件的第一个元素,直接将这个元素返回出来

let arr = [1,33,44,2,6,9]
let a= arr.find(v => v > 10)
console.log(a) // 33

5.3.6 some()、every() 方法

参数:函数-------- 返回值:true/false

some()方法------找到一个符合条件的就返回true,所有都不符合返回false
every()方法------数组所有值都符合条件才会返回true,有一个不符合返回false

let arr = [1,2,3,4,6,11]let newarr = arr.some(function(v){return v > 10
})
console.log(newarr) //truelet newarr2 = arr.every(function(v){return v > 10
})
console.log(newarr2) //false

5.4 object的新方法

在 ES6 中,添加了Object.is()Object.assign()Object.keys()Object.values()Object.entries()等方法。

5.4.1 Object.is()

  • Object.is()方法用来判断两个值是否为同一个值,返回一个布尔类型的值。
const obj1 = {};
const obj2 = {};
console.log(Object.is(obj1, obj2)); // falseconst obj3 = {};
const value1 = obj3;
const value2 = obj4;
console.log(Object.is(value1, value2)); // true

5.4.2 Object.assign()

  • Object.assign()方法用于将所有可枚举属性的值从一个或多个源对象分配到目标对象,并返回目标对象。------难理解看实例
    对象合并
const obj1 = { a: 1 };
const obj2 = { b: 2 };
const obj3 = { a:5 , c: 3 };
//对象合并,把后面对像合并到第一个对象,对象里相同的属性会覆盖
Object.assign(obj1, obj2, obj3);
console.log(obj1); // { a: 5, b: 2 , c:3}

5.4.3 Object.keys()、Object.values()、Object.entries()

  • Object.keys() 返回对象所有属性
  • Object.values() 返回对象所有属性值
  • Object.entries() 返回多个数组,每个数组是 key–value
    不解释直接看例子
<script>let person = {name: "admin",age: 12,language: ["java", "js", "css"],};console.log(Object.keys(person)); //[ 'name', 'age', 'language' ]console.log(Object.values(person)); //[ 'admin', 12, [ 'java', 'js', 'css' ] ]console.log(Object.entries(person));    /* [["name", "admin"],["age", 12],["language", ["java", "js", "css"]],]; */
</script>

5.5 对象声明简写

<script>let name ='admin'let age = 20//es6之前// let person={//     name:name,//     age:age// }//es6  声明对象时的属性名与引用的变量名相同就可以省略let person={name,age}
</script>

5.6 …(对象扩展符)

  1. 拷贝
<script>let person={name: "admin",age: 12,wife:"迪丽热巴"}let person2={...person}console.log(person2===person);//falseconsole.log(person2);//{name: 'admin', age: 12, wife: "迪丽热巴"}
</script>
  1. 合并对象
<script>const obj1 = { a: 1 };const obj2 = { b: 2 };const obj3 = { a: 5, c: 3 };let newObj ={...obj1,...obj2,...obj3}console.log(newObj); // { a: 5, b: 2 , c:3}
</script>

6、函数方面

6.1 参数默认值

<script>// es6之前// function add(a, b) {//     if(!a) a=0//     if(!b) b=0// 	return a + b;// }//es6function add(a = 0, b = 0) {return a + b;}let x=add(); let y=add(2); let z=add(3, 4); console.log(x,y,z); //x=0, y=2, z=7
</script>

6.2 箭头函数

箭头函数实现了一种更加简洁的书写方式。箭头函数内部没有arguments,也没有prototype属性,所以不能用new关键字调用箭头函数。

let add = (a,b) => {return a+b;
}
let print = () => {console.log('hi');
}
let fn = a => a * a;
//当只有一个参数时,括号可以省略,函数体只有单行return语句时,大括号也可以省略。

6.3 箭头函数和普通函数最大的区别在于其内部this永远指向其父级对象的this。(重点)

 var age = 123;let obj = {age:456,say:() => {console.log(this.age);  //this指向window}};
obj.say();   //123

7、class(类)

class 作为对象的模板被引入ES6,你可以通过 class 关键字定义类。class 的本质依然是一个函数。

  1. 创建类
<script>class person {//关键字声明方式constructor(name) {this.name=name}           say() {console.log("hello");}}var p = new person('p');p.say(); //'hello'console.log(p.name);
</script>
  1. 类的继承
    类的继承通过extends关键字实现。
    子类必须在constructor中调用super()
<script>class Person {constructor(name, age) {this.name = name;this.age = age;}say() {console.log(this.name + ":" + this.age);}}class Student extends Person {constructor(name, age, sex) {super(name, age);this.sex = sex;}}var student = new Student("admin", 12, "male");student.name;   //'admin'student.sex;    //'male'student.say(); //'ren:12'
</script>

8、promise和proxy

讲不清楚,等我学会了,后面在讲

9、模块化

  1. 导入
  • ES6使用关键字 import 导入模块(文件),有两种常用的方式:
import ‘模块名称’  from  ‘路径’;
import  ‘路径’;
  1. 导出
  • ES6 通过 export 和export default 导出模块。
let name = 'ren',age = 12;
export {name,age};
//注意:变量需要用大括号包裹,然后才能向外输出
  • 模块化优点
  •   1.防止命名冲突
    
  •   2.复用性强
    

10、运算符

... 扩展运算符
可选链 ?.
函数绑定运算符::


若本文对你有帮助 点个赞 点个关注


总结——ES6思维导图

在这里插入图片描述


http://chatgpt.dhexx.cn/article/nEoOc0xk.shtml

相关文章

GWAS分析中协变量的区分(性别?PCA?初生重?)

1. 电子书领取 前几天发了一篇GWAS电子书分享&#xff0c;异常火爆&#xff0c;阅读量8000&#xff0c;很多人评价比较基础。这本电子书主要特点是比较基础&#xff0c;GLM模型用软件和R语言进行比较&#xff0c;如何添加数字协变量、因子协变量、PCA等内容&#xff0c;可以说…

时间序列 工具库学习(5) Darts模块-多个时间序列、预训练模型和协变量的概念和使用

1.实验目的 此笔记本用作以下目的&#xff1a; 在多个时间序列上训练单个模型使用预训练模型获取训练期间未见的任何时间序列的预测使用协变量训练和使用模型 2.导库 # fix python path if working locally from utils import fix_pythonpath_if_working_locallyfix_python…

Mplus数据分析:随机截距交叉之后的做法和如何加协变量,写给粉丝

记得之前有写过如何用R做随机截距交叉滞后&#xff0c;有些粉丝完全是R小白&#xff0c;还是希望我用mplus做&#xff0c;今天就给大家写写如何用mplus做随机截距交叉滞后。 做之前我们需要知道一些Mplus的默认的设定&#xff1a; observed and latent exogenous variables a…

中介变量、调节变量与协变量

在平时看论文过程中偶会接触到这几个概念&#xff0c;然而都没想过弄明白&#xff0c;每次总觉得只要看明白个大概反正自己又不用这种方法…作为科研人&#xff0c;还是应该保持谦逊&#xff0c;保持学习 一、中介变量 1.概念 中介变量&#xff08;mediator&#xff09;是自…

协变量偏移/标签偏移/概念偏移

协变量偏移 这里我们假设&#xff0c;虽然输入的分布可能随时间而改变&#xff0c;但是标记函数&#xff0c;即条件分布P&#xff08;y∣x&#xff09;不会改变。虽然这个问题容易理解&#xff0c;但在实践中也容易忽视。 想想区分猫和狗的一个例子。我们的训练数据使用的是猫…

R语言绘制校正协变量后的ROC曲线

ROC曲线也叫受试者工作曲线&#xff0c;原来用在军事雷达中&#xff0c;后面广泛应用于医学统计中。ROC曲线是根据一系列不同的二分类方式(分界值或决定阈)&#xff0c;以真阳性率(灵敏度)为纵坐标&#xff0c;假阳性率(1-特异度)为横坐标绘制的曲线。 ROC曲线主要应用于二分类…

倾向值分析(协变量选择)

Hirano 和 Imbens 基于预设的临界t值来设定预测变量的方法 逻辑回归&#xff1a;逻辑回归虽然带有回归字样&#xff0c;但是逻辑回归属于分类算法。逻辑回归可以进行多分类操作&#xff0c;但由逻辑回归算法本身性质决定其更常用于二分类。 a.逻辑回归公式如下&#xff1a; 其…

使用aPCoA包实现校正协变量的主坐标分析(aPCoA)以排除混杂协变量的影响

使用aPCoA包实现校正协变量的主坐标分析&#xff08;aPCoA&#xff09;以排除混杂协变量的影响 主坐标分析&#xff08;PCoA&#xff09;广泛用于生态学和微生物学等领域&#xff0c;以描述样本之间的差异&#xff0c;例如群落的beta多样性等。然而混杂的协变量可能会使与感兴趣…

多变量时间序列、预训练模型和协变量

darts官方地址 GitHub&#xff1a;https://github.com/unit8co/darts文档&#xff1a;https://unit8co.github.io/darts/index.html 本笔记可作为以下内容的教程&#xff1a; 在多个时间序列上训练单个模型使用预训练模型来获得训练期间看不到的任何时间序列的预测训练和使用…

协变量偏移_恶意软件分类的协变量偏移

协变量偏移 介绍 (Introduction) Covariate shift in the data-generating distribution lowers the usefulness of generalization error as a measure of model performance. By unpacking the definitions, the previous sentence translates to “high accuracy on the dis…

matlab 去除协变量,求助协变量调整

花了一个礼拜的时间重新学习了一下协方差&#xff0c;回归&#xff0c;感觉自己的理解很多都是不对的。 协方差分析是方差分析线性回归&#xff0c;但它要求很多&#xff0c;比如至少有两个分组(一个分组就是线性回归了)&#xff0c;协变量要是连续变量自变量和因变量要有线性关…

自变量/解释变量/因变量/响应变量/协变量等变量相关概念探析

概念探析 一般科学实验主要涉及以下三种变量&#xff1a; 自变量/独立变量&#xff08;independent variable&#xff09;&#xff1a;自变量是指在实验中由实验者操作的变量&#xff0c;它被认为不会受其他变量的影响&#xff08;即独立性&#xff09;。 因变量&#xff08…

爬虫-猫眼电影票房

背景 最近也不知道咋了&#xff0c;一直遇到 字体反爬手段&#xff0c;起点中文网&#xff0c;抖音等等吧&#xff0c;猫眼我一直想搞&#xff0c;只是没有精力了&#xff0c;前面搞了2个了&#xff0c;不差这一个。搞完这个&#xff0c;不在搞字体反爬了。 目标网站 猫眼票房…

python爬虫实例——中国电影票房

刚好最近在做一个关于中国电影市场的分析&#xff0c;所以这篇实例就诞生啦&#xff01;&#xff01;&#xff01; 一、观察网页 我所爬取的网站是&#xff1a;中国票房——年度票房。 网址甩出来&#xff1a;http://www.cbooo.cn/year?year2019 我们需要的数据是从2015年到…

python爬虫实战——猫眼电影案例

python爬虫实战——猫眼电影案例 背景 笔者上一篇文章《基于猫眼票房数据的可视化分析》中爬取了猫眼实时票房数据&#xff0c;用于展示近三年电影票房概况。由于数据中缺少导演/演员/编剧阵容等信息&#xff0c;所以爬取猫眼电影数据进行补充。关于爬虫的教学内容&#xff0c…

猫眼app产品分析和原型绘制

本项目为学习产品知识和技能过程中的一个小结&#xff0c;针对猫眼电影app的简单产品分析&#xff0c;顺便巩固xmind和axure技能。 项目名称 &#xff1a;猫眼电影app 产品背景&#xff1a;中国电影市场近10年&#xff08;2009年-2019年&#xff09;由高速增长阶段过渡到低速增…

Python爬虫实战+数据分析+数据可视化(猫眼电影)

一、爬虫部分 爬虫说明&#xff1a; 1、本爬虫是以面向对象的方式进行代码架构的 2、本爬虫爬取的数据存入到MongoDB数据库中 3、爬虫代码中有详细注释 代码展示 import re import timefrom pymongo import MongoClient import requests from lxml import html from urllib …

python爬虫基础案例——爬取猫眼电影并保存数据到excel

好久没更新博文了&#xff0c;最近忙于学习scrapy框架和微信小程序开发&#xff0c;今天看到一个自己之前写的但是中途放弃的爬虫小案例——爬取猫眼电影TOP100榜的相关数据&#xff0c;现在将它写好并分享给大家。 爬虫的套路就是通过url发送请求&#xff0c;获取数据&#x…

采集电影票房实时数据

网址&#xff1a;aHR0cDovL3BmLmZlLnN0Lm1hb3lhbi5jb20vZGFzaGJvYXJk 抓包分析 根据数据包可以发现&#xff0c;该网站在发送了ajax请求的同时又请求了一份woff文件&#xff0c;基本上可以确定这里使用了字体文件加密的方式了。 分析请求参数 不难看出&#xff0c;只有timestam…

【Python爬虫】猫眼电影榜单Top100

这是一个入门级的Python爬虫&#xff0c;结构易于理解。本文对编写此爬虫的全过程进行了讲述。希望对大家的Python爬虫学习有所帮助。 一、目标 爬取猫眼电影榜单Top100&#xff0c;将数据存入Excel文件中&#xff0c;并利用pyecharts库进行数据可视化得到.html文件和.png文件…