2-3、ES6 详解
const
基础
用于定义常量的,初始化时必须赋值
特点:
- 不允许重复赋值
- 对于基础类型后续的值不可更改
 - 对于复杂类型后续的引用地址不可更改,但其中的值可以更改
 
 - 有块级作用域
 - 存在暂时性死区
 
1  |  | 
面试点
在 ES5 中,如何模拟一个常量的[不允许重复赋值]
1  |  | 
在 ES5 中,如何模拟块级作用域
1  |  | 
对于复杂类型,是用 const 还是 let?
答案:const
对于复杂类型,用 const 后将不允许对其重新覆盖(引用地址不可变),但不会限制值的更改
一句话:能用 const 的坚决不用 let
如何对复杂类型常量化
考察点:Object.freeze(obj)
官方文档:Object.freeze() - JavaScript | MDN
被冻结的对象不能再被更改:不能添加新的属性,不能移除现有的属性,不能更改它们的可枚举性、可配置性、可写性或值,对象的原型也不能被重新指定
缺点:只能冻结根层属性,对内嵌的复杂类型无法冻结
解决方案:针对多层嵌套的复杂类型,手动循环冻结
1  |  | 
解构
解开结构
对象解构:{}
数组解构: []
1  |  | 
解构操作的本质算是取值的语法糖
1  |  | 
数组解构能很方便的进行变量交换
1  |  | 
箭头函数
基础
1  |  | 
特点
- 没有自己的 this,它的 this 取决于定义时上下文
- 所以就不能用于构造函数
 
 - 没有内置的 arguments
 
class
基础
常用语法
1  |  | 
完整语法
1  |  | 
场景模拟
1  |  | 
使用场景
适配器模式,封装核心
1  |  | 
面试点
class 的类型是什么?
typeof class 为 'function'
Promise
处理异步的一种方式
1  |  | 
ES6(ECMAScript 2015)新增的数组和对象方法有很多,以下是一些常用的方法:
数组方法
官方文档:Array - JavaScript | MDN
ES6(ECMAScript 2015)新增的数组些常用的方法:
Array.from(): 用于将类数组对象或可遍历对象转为真正的数组。Array.of(): 用于将一组值转为数组。Array.of('foo', 2, 'bar', true);// ["foo", 2, "bar", true]
copyWithin(): 用于在当前数组内部,将指定位置的成员复制到其他位置。fill(): 用于填充数组。find(): 返回数组中第一个满足条件的元素。findIndex(): 返回数组中第一个满足条件的元素的下标。includes(): 检索数组是否包含某个值,返回布尔值。entries(): 帮助数组遍历每一个 key 值与 value 值。keys(): 帮助数组遍历所有的 key 值。values(): 帮助数组遍历所有的 value 值。
对象方法
官方文档:Object - JavaScript | MDN
ES6(ECMAScript 2015)新增的对象常用的方法:
Object.assign(): 用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。Object.keys(): 返回一个由给定对象的自身可枚举属性组成的数组。Object.getOwnPropertyNames(): 返回一个由指定对象的所有自身属性(包括不可枚举属性但不包括 Symbol 值作为名称的属性)的属性名(包括不可枚举属性)组成的数组。Object.getOwnPropertySymbols(): 返回一个由指定对象的所有自身 Symbol 属性值的属性名组成的 Array。Object.is(): 用来检测两个值是否是同一个对象Object.setPrototypeOf(): 设置一个对象的内部[[Prototype]]链接。Object.values(): 返回一个由给定对象的所有自身属性的值组成的数组。Object.entries(): 返回一个由给定对象的所有自身属性的键值对组成的数组。Object.get(): 获取对象的属性值。Object.set(): 设置对象的属性值并返回该对象。Object.create(): 使用给定的原型和可选的属性描述符创建一个新的对象。Object.defineProperty(): 在对象上定义一个新的属性,或修改一个对象的现有属性,并返回这个对象。Object.defineProperties(): 在一个对象上定义一个直接以该对象为基础的对象的新属性和/或修改对象的现有属性的性质。Object.freeze(): 防止对象的属性被更改,并防止对象被扩展。Object.seal(): 防止对象的属性被删除,并防止新的属性被添加到对象中。Object.preventExtensions(): 防止新属性添加到对象中,但允许现有属性的修改。
扩展
尾调用
一个函数执行结果作为另一个函数的返回值
1  |  | 
尾调用场景
1  |  | 
2-3、ES6 详解
      https://mrhzq.github.io/职业上一二事/前端面试/前端八股文/2-3、ES6 详解/