es6 相关面试总结
1、es6 是什么
新一代的js 语言标准,对其核心做了升级优化,更加适合大型应用开发。
2、箭头函数优缺点
优点: 1.代码优化 2.this 指向不会变动,永远指向其父元素
缺点: 1.没有arguments 参数 2.不能通过 apply call bind改变this指向
不能用箭头函数的场景: 1.构造函数 2.对象原型 3.对象方法
3、箭头函数怎么获取arguments : 可以使用es6 的解构语法来代替
4、let const var 区别
相同作用域下,let const 不能重复声明,而var 可以
var 可以跨块,let const 不能
const 定义的常量不能改变,并且必须初始化(注:const 定义的对象,是可以允许修改其属性值的,const 定义的数组,其元素可以被改变。 可以用Object.freeze()来冻结就不可以修改了)
5、es6 对字符串做了哪些升级优化
新增了模板字符串
新增方法
inclueds() 判断是否包含某字符串 返回true/false
startsWith() 检测是否以指定字符串开始 返回true/false
endWith() 检测是否以指定字符串结束 返回true/false
repeat() 重复字符串多少遍
padstart() 从头部补全字符串
padend() 从尾部补全字符串
6、数组方面的优化升级
数组结构赋值
扩展运算符 ...
新增的方法
find()找到符合条件的第一个元素,并返回,没找到返回 undifined
includes() 查看是否包含某元素
fill()用新元素替换数组内元素
flat() 扁平化数组
7、number 数值方面的优化升级
isFinite() 判断有限数
isInteger() 判断是否为整数
isNaN() 判断一个值是否为NaN
8、 对象方面的优化升级
可以直接以变量形式声明
对象的解构赋值
对象的扩展运算符
新增的方法:
object.is() 接收两个参数,判断两个参数值以及类型,是否相等,返回true/false
object.assign()将原对象所有的属性,复制到目标对象,(如果后面的参数有一个不是对象,就会抛出typeerror 错误)
let obj1 = {a:1}
let obj2 = {b:2}
consolelog(object.assign({},obj1,obj2)) // {a:1,b:2}
object.setPrototypeof() 同 proto 设置当前对象的prototype对象
object.getPrototypeof() 同 proto 读取当前对象的prototype对象
object.keys() 获取所有键名
object.values()获取所有键值
objcet.entries()获取所有键值对数组
9、函数方面的优化升级
箭头函数
双冒号运算符:: 用来取代,bind/call/apply
10、symblo 是什么?有什么作用?
es6 引入的新的数据类型,表示独一无二的值
11、set 是什么?有什么作用?
是array 的一种新的数据结构,它的成员都是唯一的。(这个特性可以实现数组去重)
12、Map()是什么?(map 的遍历顺序是插入顺序)
是es6 引入的一种新的数据结构,类似于对象,但是键名不仅仅可以是字符串,它可以是任何类型。
13、proxy
作用:用于创建一个对象的代理,从而实现基本操作的拦截和定义。可以理解成是一种拦截器,在目标对象之前设一层拦截,想要访问必须先通过该拦截
用法: const p = new Proxy(target, handler)
target: 要使用proxy 包装的目标对象
handler:以函数作为属性的对象
常用的拦截方法:
apply:拦截函数调用的操作
get:拦截对象属性的读取
set:拦截对象属性的设置
更多es6 新特性 之 Proxy, 这次彻底搞懂 - 掘金
14、promise
理解: es6 新引入的构造器,用来优化异步代码。解决‘回调地狱’,可读性更高,可以链式调用。
优点:1、可以链式调用,减低编码难度,2、代码可读性增强。3、对象的状态不受外界影响,状态一旦改变,就不会在变
promise有3种状态:1、pending(进行中), 2、fulfilled(成功) 3、rejected(失败)
状态的缺点: 1、无法取消 2、当pending 时,无法得知当前的状态,时刚刚开始还是即将完成。
then方法: 接受两个函数作为参数,1:promise 成功的回调。2:promise 失败的回调
特点: 1、通过.then添加的回调。不论什么时候,都会被调用。(js 常规写法种,如果未执行完成,就不会调用。)2、可以多次调用
15、for...in 和for ... of 的区别
for in 一般遍历对象的key .for of 一般遍历数组的value。
16、async 函数是什么?有什么作用
async 可以理解成,promise 的语法糖,配合promise 更好的实现异步操作。
17、什么是class,作用是什么?extends是什么作用
可以看作是es5 生成实例对象的构造函数的语法糖。
作用:定义了类 的概念,写法更加清晰,更像一种面向对象编程
extends: 新引入的关键字,本质还是构造函数+原型链的继承, 作用是:class 可以通过extends 实现继承。
class 和es5 的构造函数的区别:1、类内部定义的所有方法,都不可枚举。2、class 必须用new 命令操作。3、class 不存在变量提升,必须先定义才能实例化。4、继承机制不同
18、module、exprot、import
是es6 统一前端模块化的设计思想和实现。
exprot作用:用于从模块中导出内容(函数、对象、原始值),通过import 语句导入使用它们
exprot default: 用于文件的默认导出接口,一个文件只能有一个
commonJS 种的reqire(),exprots 组合 与 es module 种的import,export组合
commonjs | module |
reqire() 需要谁导入谁,返回值对象 | import 本质是关键字 |
exports 本质对象,想暴露谁,就添加属性exports (=nodeJs 中的module.exprots) | exprots 本质是关键字 |