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组合