现在总结一下ES6的一些特性
let和const
let和const是ES6 新增的声明命令
- let声明变量,不存在变量提升,是块级作用域,在作用域里不可以重复声明,在声明时可以不赋值,并且值是可以修改的
- const声明常量,不存在变量提升,是块级作用域,在作用域里不可以重复声明,在声明时必须要赋值,并且值不可以修改
let和const还存在一个暂时性死区,只要块级作用域内存在let或const命令,它所声明的变量就“绑定”这个区域,不再受外部的影响。
对比var
- var声明变量,存在变量提升,是函数作用域,可以重复声明,可以不赋值,并且值是可以修改的。
call、apply、bind
- 相同点:都能改变this指向
- 不同点:
- 传参方式不同:call和bind以枚举的方式传参,apply以数组的方式传参
- 调用方式不同:call和apply立即调用,bind返回一个函数体,需要手动调用
原型链
如果实例本身没有方法就向上找
实例=>构造函数原型=>对象原型=>null
Class类
通过constructor创建构造函数,与普通的构造函数相似,它也可以在原型上添加方法,还可以直接在constructor后面添加方法
Class还可以通过extends让子类继承父类的属性和方法
箭头函数
箭头函数没有this指向,里面的this指向它的父级。如果有且只有一个参数,括号可以省略,如果执行的函数只有一句花括号可以省略,return也可以省略
set、map构造函数
set是一个构造函数,生成set数据类型,具有自动去重的作用,还可以对它进行增删查的操作:add(添加的内容)、delete(要删除的内容)、has(查找的内容)
map是一个构造函数,针对对象格式的数组,可以对它进行增删改查的操作:set(增加或修改的key,添加或修改的value)、delete(删除的key)、get(查找的key)
深拷贝、浅拷贝
浅拷贝值拷贝一层,浅拷贝过后的变量和原变量进行修改后,都会对对方产生影响。
深拷贝拷贝每一层,深拷贝过后的变量和原变量修改后,,不会对对方产生影响。我们可以通过Object.assgin(容器,拷贝对象)进行深拷贝。除此以外还可以使用JSON的方法来进行深拷贝,转换成字符串格式,再将它转换成对象格式就可以了,但是这种做法存在一定的弊端,如果使用时间戳了,会产生一定的误差
symbol数据类型
它属于值类型数据,代表唯一的值,用于存放关键数据,或储存服务器数据。我们可以使用for()指定一个symbol空间,来自同一来源的symbol数据才会相等。我们还可以通过keyFor()查询symbol数据,不过这只是针对用for()创建的symbol数据
Promise构造函数
Promise是ES6新增的构造函数,它是用于创建promise实例对象,代表将来要发生的事情,用于处理异步操作。Promise本身是同步的,但是里面then方法和catch方法是异步的。我们可以使用Promise解决回调地狱(异步函数深层嵌套)的问题
注意:
嘿,说你呢,这里还差很多东西,快来补充