笔记内容为 尚硅谷Web前端ES6教程,涵盖ES6-ES11 教学课程笔记整理
Set
- ES6 提供了新的数据结构 Set(集合),可以
自动去重 - 它类似于数组,但成员的值都是唯一的,集合实现了 iterator 接口,所以可以使用
扩展运算符和for...of...进行遍历 - 集合的属性和方法
size返回集合的元素个数add增加一个新元素,返回当前集合delete删除元素,返回boolean值has检测集合中是否包含某个元素,返回boolean值clear清空集合
集合实践
[1,2,3,4,5,4,3,2,1]对这个数组进行去重、求交集、并集、差集操作
数组去重
new Set(arr)可以对 arr 数组去重,得到去重后的 Set 集合- 使用扩展运算符
...把 Set 转换成数组
交集
- 先对 arr 去重并转换为数组
[...new Set(arr)],得到[ 1,2,3,4,5 ] - 对该数组使用
filter方法进行过滤 - 对 arr2 去重,得到去重后的集合
4,5,6 - 使用集合的
has方法,判断是否交集
还有一种简便写法,原理相同,只是更简略
并集
[...arr, ...arr2]先合并两个数组new Set([...arr, ...arr2])对合并后的数组去重,得到一个集合[...new Set([...arr, ...arr2])]把集合转换成数组
差集
- 差集与交集是相反的,因此只要添加一个取反符号
!即可
Map
- ES6 提供了 Map 数据结构
- 它类似于对象,也是键值对的集合
- 但是
键的范围不限于字符串,各种类型的值(包括对象)都可以当作键 - Map 也实现了 iterator 接口,所以可以使用
扩展运算符和for...of...进行遍历 - Map 的属性和方法
size返回 Map 的元素个数set增加一个新元素,返回当前 Mapget返回键名对象的键值has检测 Map 中是否包含某个元素,返回 boolean 值clear清空集合,返回 undefined
class 类
- ES6 提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对象的模板
- 通过 class 关键字,可以定义类
- 基本上,ES6 的 class 可以看作只是一个语法糖,它的绝大部分功能,ES5 都可以做到,新的 class 写法只是让对象原型的写法更加清晰、更像面下搞对象编程的语法而已
- 知识点
- class 声明类
- constructor 定义构造函数初始化
- extends 继承父类
- super 调用父级构造方法
- static 定义静态方法和属性
- 父类方法可以重写
实例化一个对象
-
先按照 ES5 的方式,用构造函数,去实例化一个对象,以手机为例
-
用 ES6 class 的语法来实现
- 关键字
class - 类名
Phone - 花括号
{} - 构造方法
constructor(){}这个名字不能修改,使用new 类名的时候,这个方法是可以自动执行的 - 类里的方法必须使用
方法名(){}的形式,不能使用 ES5 的对象完整形式方法名: function(){}
- 关键字
static
构造函数本身也是一个对象,可以往对象上添加属性和方法- 实例对象(nokia)身上是没有构造函数(Phone)身上的属性(name)的
- 实例对象(nokia)和函数对象(Phone)上的属性是不相通的
实例对象(nokia)的属性,和构造函数原型对象(Phone.prototype)上的属性是相通的
-
属于函数对象(Phone),但不属于实例对象的属性(nokia),对于这样的属性,称为静态成员(Phone.name, Phone.change)
-
static标注的属性和方法,它属于类,不属于实例对象
数值的扩展
Number.EPSILON是 JavaScript 表示的最小精度,Number.EPSILON 属性的值接近于2.2...-16,两个数字的差如果小于这个值,那么就认为这两个值相等- 二进制和八进制
Number.isFinite检测一个数值是否为有限数Number.isNaN检测一个数值是否为 NaNNumber.parseInt、Number.parseFloat字符串转整数Number.isInteger判断一个数是否为整数Math.trunc将数字的小数部分抹掉Math.sign判断一个数到底为正数、负数、还是零
浅浅的解析一下
Number.EPSILON
Number.isFinite
Number.parseInt、Number.parseFloat
对象方法的扩展
Object.is判断两个值是否完全相等
Object.assign用于对象的合并- 如果两个对象属性相等,则后者值覆盖前者值
- 如果前者属性比后者多,则多的属性值保持不变
- 如果后者属性比前者多,则该属性并不会添加到前者的属性上
Object.setPrototypeOf设置原型对象,Object.getPrototypeOf获取原型对象
一些新特性
Array.prototype.includes,includes 方法用来检测数组中是否包含某个元素,返回布尔类型值
- 指数操作符
**,用来实现幂运算,功能与Math.pow结果相同