es6有哪些
promise 箭头函数 模板字符串 解构 let/const Async/Await class import/export … 展开运算符
es6和es5区别
ES5中是没有块级作用域的
箭头函数ES6中的函数定义不再使用关键字function(),而是利用了()=>来进行定义
模板字符串
解构赋值
等等
es5:
不允许使用eval
4)不允许delete
4)不允许with语句
promise解决回到地狱
-
Promise一旦新建就立刻执行,此时的状态是Pending(进行中),它接受两个参数分别是"resolve" 和 “reject”.它们是两个函数.
- resolve函数的作用是将Promise对象的状态从’未完成’变为’成功’(由Pending变为Resolved),在异步操作成功时,将操作结果作为参数传递出去;
-reject函数的作用是将Promise对象的状态从’未完成’变为失败(由Pending变为Rejected),在异步操作失败时调用,并将异步操作的错误作为参数传递出去.
- resolve函数的作用是将Promise对象的状态从’未完成’变为’成功’(由Pending变为Resolved),在异步操作成功时,将操作结果作为参数传递出去;
-
promise是js中的一个对象,用于生成可能在将来产生结果的值。 值可以是已解析的值,也可以是说明为什么未解析该值的原因。
-
promise 可以有三种状态: pending fulfilled rejected
- pending:初始状态,既不是成功也不是失败
- fulfilled:意味着操作完全成功
- rejected:意味着操作失败
-
一个等待状态的promise对象能够成功后返回一个值,也能失败后带回一个错误
-
当这两种情况发生的时候,处理函数会排队执行通过then方法会被调用。
-
promise构造函数是同步执行的,then方法是异步执行的。。 它是异步
方法:
then:
可以接受两个回调函数作为参数。第一个回调函数是Promise对象的状态变为resolved时调用,第二个回调函数是Promise对象的状态变为rejected时调用。其中,第二个函数是可选的,不一定要提供。这两个函数都接受Promise对象传出的值作为参数。
.catch:
处理rejected 的情况,与then的第二个参数onRejected相同
.all:
多任务处理,多个promise合并为一个。 全部执行完才then
.race:
多任务处理,多个promise合并为一个。 其中一个promise执行完就then
var ,let和const的区别
- var:变量提升,变量可重复声明,可在声明的上面访问变量,let const有暂时性死区。不是块级作用域
- let:无变量提升;不可重复声明;块级作用域;(用let声明的变量,只在let声明存在的代码块中生效)
- const:无变量提升;不可重复声明(一旦声明立即赋值,声明的是一个常量,不可修改);块级作用域;
箭头函数特性
箭头函数是匿名函数,不绑定自己的this,super,new.target
箭头函数会捕获其所在上下文的this值,作为自己的this值。call/apply不会改变
箭头函数不能作为构造函数,和 new 一起用就会抛出错误
箭头函数没有原型属性
不能简单返回对象字面量
使用json方式实现深拷贝
let arr2 = JSON.parse(JSON.stringify(arr1));
模板字符串
可接受变量,可换行,可写js语句。方便简洁
怎么写 class ,为何会出现 class?
ES6的class可以看作是一个语法糖,它的绝大部分功能ES5都可以做到,新的class写法只是让对象原型的写法更加清晰、更像面向对象编程的语法
谈一下对async//await的理解
常规函数使用await没有效果;async修饰的函数内部return不会得到预期的结果,返回一个promise对象;
async...await是基于promise的generator语法糖,它用来等待promise的执行结果,
await等待的promise结果是resolve状态的内容,reject状态的内容需要使用try...catch获取,
await关键字必须要出现在async修饰的函数中,否则报错。
set和map的区别
Set是一种类似数组的集合类型,它与数组不同的是,不允许存在重复数据;常用操作方法有:add,delete,has,clear等;遍历使用forEach;
Map是一种类似对象的集合类型,它与对象不同的是,key可以接受对象类型,常用的操作方法有:set,get,has,delete等;遍历使用forEach
如何使用Set去重
let item = [...new Set(arr)];
forEach、for in、for of三者区别
forEach更多的用来遍历数组
for in 一般常用来遍历对象或json
for of数组对象都可以遍历,遍历对象需要通过和Object.keys()
for in循环出的是key,for of循环出的是value
说一下es6的导入导出模块
导入通过import关键字
只导入一个 :import {sum} from "./example.js"
导入多个 :import {sum,multiply,time} from "./exportExample.js"
导入一整个模块 :import * as example from "./exportExample.js"
导出通过export关键字
可以将export放在任何变量,函数或类声明的前面
也可以使用大括号指定所要输出的一组变量
使用export default时,对应的import语句不需要使用大括号
不使用export default时,对应的import语句需要使用大括号
手写promise
var p = new Promise((resolve,reject)=>{
if(1){
resolve(‘成功’)
}
else{
reject(‘失败’);
})
p.then((res)=>{
res = data
}).catch((err)=>{
失败
})