ES6 面试题

221 阅读5分钟

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 的所有成员