1.es5 和 es6 的区别,说一下你所知道的 es6
ECMAScript5,即 ES5,是 ECMAScript 的第五次修订,于 2009 年完成标准化
ECMAScript6,即 ES6,是 ECMAScript 的第六次修订,于 2015 年完成,也称 ES2015
ES6 是继 ES5 之后的一次改进,相对于 ES5 更加简洁,提高了开发效率
2.ES6 新增的一些特性
-
let 声明变量和 const 声明常量,两个都有块级作用域
ES5 中是没有块级作用域的,并且 var 有变量提升,在 let 中,使用的变量一定要进行声明
-
箭头函数
ES6 中的函数定义不再使用关键字 function(),而是利用了()=>来进行定义
-
模板字符串
模板字符串是增强版的字符串,用反引号(`)标识,可以当作普通字符串使用,也可以用来定义多行字符串
-
解构赋值
ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值
-
for of 循环
for...of 循环可以遍历数组、Set 和 Map 结构、某些类似数组的对象、对象,以及字符串
-
import、export 导入导出
ES6 标准中,Js 原生支持模块(module)。将 JS 代码分割成不同功能的小块进行模块化,将不同功能的代码分别写在不同文件中,各模块只需导出公共接口部分,然后通过模块的导入的方式可以在其他地方使用
-
set 数据结构
Set 数据结构,类似数组。所有的数据都是唯一的,没有重复的值。它本身是一个构造函数
-
... 展开运算符
可以将数组或对象里面的值展开;还可以将多个值收集为一个变量
-
修饰器 @
decorator 是一个函数,用来修改类甚至于是方法的行为。修饰器本质就是编译时执行的函数
-
class 类的继承
ES6 中不再像 ES5 一样使用原型链实现继承,而是引入 Class 这个概念
-
async、await
使用 async/await, 搭配 promise,可以通过编写形似同步的代码来处理异步流程, 提高代码的简洁性和可读性 async 用于申明一个 function 是异步的,而 await 用于等待一个异步方法执行完成
-
promise
Promise 是异步编程的一种解决方案,比传统的解决方案(回调函数和事件)更合理、强大
-
Symbol
Symbol 是一种基本类型。Symbol 通过调用 symbol 函数产生,它接收一个可选的名字参数,该函数返回的 symbol 是唯一的
-
Proxy 代理
使用代理(Proxy)监听对象的操作,然后可以做一些相应事情
3.var、let、const 之间的区别
var 声明变量可以重复声明,而 let 不可以重复声明
var 是不受限于块级的,而 let 是受限于块级
var 会与 window 相映射(会挂一个属性),而 let 不与 window 相映射
var 可以在声明的上面访问变量,而 let 有暂存死区,在声明的上面访问变量会报错
const 声明之后必须赋值,否则会报错
const 定义不可变的量,改变了就会报错
const 和 let 一样不会与 window 相映射、支持块级作用域、在声明的上面访问变量会报错
4.使用箭头函数应注意什么?
用了箭头函数,this 就不是指向 window,而是父级(指向是可变的)
不能够使用 arguments 对象
不能用作构造函数,这就是说不能够使用 new 命令,否则会抛出一个错误
不可以使用 yield 命令,因此箭头函数不能用作 Generator 函数
5.Promise 构造函数是同步执行还是异步执行,那么 then 方法呢?
promise 构造函数是同步执行的,then 方法是异步执行的
6.promise 有几种状态,什么时候会进入 catch?
三个状态:pending、fulfilled、reject
两个过程:padding -> fulfilled、padding -> rejected
当 pending 为 rejectd 时,会进入 catch
7.Set 集合 和 Map 字典
Set:
-
Set是es6新增的数据结构,类似于数组,所有成员的值都是唯一的,没有重复的值,一般称之为集合
-
一般用 const s = new Set() 来创建
-
Set 集合增删改查的方法有 add() delete() has() clear()
add() 添加某个值,返回 Set 结构本身,当添加已经存在的元素,set不会进行处理添加
delete() 删除某个值,返回一个布尔值,表示删除是否成功
has() 返回一个布尔值,判断该值是否为Set的成员
clear() 清除所有成员,没有返回值
- Set实例遍历的方法有
keys():返回键名的遍历器
values():返回键值的遍历器
entries():返回键值对的遍历器
forEach():使用回调函数遍历每个成员
Map
-
Map类型是键值对的有序列表,而键和值都可以是任意类型
-
一般用 const m = new Map() 来创建
-
Map 实例针对增删改查有这些属性和操作方法 size 属性 set() get() has() delete() clear()
size属性返回 Map 结构的成员总数。
set() 设置键名key对应的键值为value,然后返回整个 Map 结构,如果key已经有值,则键值会被更新,否则就新生成该键
get方法读取key对应的键值,如果找不到key,返回undefined
has方法返回一个布尔值,表示某个键是否在当前 Map 对象之中
delete方法删除某个键,返回true。如果删除失败,返回false
clear方法清除所有成员,没有返回值
- Map结构原生提供三个遍历器生成函数和一个遍历方法
keys():返回键名的遍历器
values():返回键值的遍历器
entries():返回所有成员的遍历器
forEach():遍历 Map 的所有成员