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 详解/