一、什么是ES6
答:
ES6结束ECMAScript的第六个版本
js由三部分组成 DOM(文档对象模型) BOM(浏览器对象模型) ECMAScript(js语法)
二、promise
1.promise的理解
答:
promise就是ES6为我们提供的一种异步解决方案 在我的理解中promise就是把异步换了一种写法
从之前的嵌套函数变成了链式的写法
2.什么是promise?promise能解决什么?
答:
promise就是ES6为我们提供的一种异步解决方案 在我的理解中promise就是把异步操作换了一种写法
从之前的嵌套函数变成了链式的写法
promise能够解决**回调地狱**的问题 所谓的回调地狱就是拿到a的数据去请求b的数据
拿到b的数据去请求c的数据 这样回调函数嵌套回调函数的写法就叫做回调地狱
这样的写法比较臃肿 后期难以维护
出来promise之外还可以用async最终解决方案
3.promise的特点 (三种状态)
答:
promise有三种状态 resolve(成功),reject(失败),pending(进行中)
如果成功的话 可以用resolve将成功的结果返回出去 通过.then()方式来接收
如果失败的话 可以用reject 将失败的结果返回出去 通过.catch()方式来接收
pending的状态是进行中 一旦进行之后他的状态是不可逆的
4.promise怎么用?
答:
如果要使用promise我们要对promise进行实例化 在实例化构建里面有一个回调函数这个函数里面有两个参数
分别是(resolve,reject) 我们可以通过promise的实例化对象调用可以用.then() .catch()的方式
来接收结果
5.哪些东西本身就是promise对象
答:
jQuery的ajax请求 axios请求 等等 都是promise对象 都可以直接用.then(),.catch()
6.哪些东西不是promise对象
答:
wx.request和原生ajax都不是promise对象 不能用.then()方法 如果想用 可以自己封装个promise
三、说一下async和await 以及他们和promise的区别
答:
async是异步操作的最终解决方案 async一般和await配合使用 当我们给函数前面加上关键字async的时候
这个函数的返回值就是一个promise 而await是一个同步的操作 await只能配合async不然会报错
await后面可以是一个表达式也可以是一个promise 在await下面的代码 必须等在await执行完成之后才去执行
他们和promise区别就是在写法上更简洁
四、generator函数
答:
generator函数也是ES6的异步回调的一种写法 但是这种写法背async取代了
generator给函数用*表示 和yield搭配使用
五、promise的all和race方法
答:
promise还给我们提供了.all和.race
期中all方法就是 将多个请求合并成一个请求 比如当首页要请求10接口 就可以用promise.all进行合并
.race的作用也是将多个请求合并成一个请求 谁先请求成功就先返回谁
六、说一下var let const 区别
答:
var和let是声明变量的 const是声明常量的
var声明的变量存在变量提升 而let和const不会
var是函数作用域生效 let和const是块级作用域生效
var在全局作用域声明的变量会挂载的window上 而let和const不会
7.箭头函数与普通函数的区别
答:
箭头函数就是ES6为我们提供的一种简洁的函数写法
写法:函数名()=>(){} 当函数中只有一个表达式的时候{}和return都可以省略
特点:箭头函数的this始终指向箭头函数定义式离this最近的一个函数 如果没有就指向window
区别:
箭头函数不能用于构造函数 不能使用new xxx 而普通函数可以
在普通函数中 this始终指向调用它的对象 如果用于构造函数 this指向创建的对象实例
在箭头函数中 this始终指向离箭头函数定义时离this最近的一个函数 如果没有就指向window
8.说一下for in 和for of 的区别
答:
for in 用来遍历对象 而for of 遍历对象会报错
for in 遍历数组 得到数组的下标 而 for of 遍历数组 得到数组里面的每一个元素
9.ES5的面向对象和ES6的面向对象
答:
ES5的面向对象是通过new 一个构造函数实现的
ES6的面向对象是通过class实现的 ES6的class就是面向对象的语法糖
面向对象是一个概念或者编程思想 面向对象相当于面向过程来讲的 面向对象方法 把相关的数据和方法
组织为一个整体来看待 从更高的层次来进行系统建模 更贴近事物的自然运行模式
10.说一说new操作符具体干了什么
答:
在js中new操作符用于构建一个给定构造函数的实例对象
new的实例可以访问构造函数里的属性 也能访问原型上的方法
创建一个新的obj对象 将对象与构造函数通过原型链连接起来 将构造函数中的this绑定到新建的对象obj上
根据构造函数返回的类型进行判断 如果是原始值将被忽略 如果返回是对象 将会正常处理
11.说一下JavaScript原型 以及原型链的理解
答:
1.prototype 显示原型
每个函数都有一个prototype属性 被称为显示原型
里面包含了构造函数公共的方法
2.__proto__ 隐式原型
每个实例对象都会有__proto__属性 被称为隐式原型
每个隐式原型的实例对象的属性都指向自身构造函数的现实原型prototype中
3.constructor
每个prototype原型都有一个constructor属性 指向它关联的构造函数
4.原型链
获取对象属性或方法时 如果对象本身没有这个属性 那就去他的原型__proto__中去找 如果还找不到
就去找原型的原型 一直找到最顶层(object.prototype)为止 最顶层也有proto属性 值为null
12.JavaScript中如何实现继承
答:
js继承方式有很多 主要分为ES5和ES6继承
ES5继承:
es5实现继承主要通过prototype来实现的
实例继承 构造函数继承 组合继承(结合前两者)
ES6继承:
用class来定义类 用extends继承类 用super()表示
13.class与class继承
答:
传统的js中只有对象 没有类的概念 它是基于面向对象而言的
ES5通过构造函数来创建类 ES6通过class关键字来创建类 跟传统的面向对象语言更加接近
ES5中如果要生成一个对象实例 需要先定义一个构造函数 然后通过new操作符来创建实例
ES6中引入了class这个概念 通过class关键字定义类