1.说一下原型与原型链
a.每个对象都有__proto__属性 指向原型对象__prototype__
b.每一个构造函数都有__prototype__ ,__prototype__中的coustructor指构造函数本身
c.每个对象都会继承原型对象中的属性和方法,原型链会枚举刚对象指向的所有原型对象,直至null返回undfiend,
d. hasOwnPreperty不会遍历原型链
2.VUE中data为什么是函数而不是对象
a.在component中为函数,new Vue()中可以为对象
b.component中每一个VUE组件其实为VUE实例,如果每一个data都为对象则data内的属性会被其他VUE实例所影响,而为函数时每个VUE实例中的data拥有各自的函数作用域,this就可以指向当前实例本身
3.不同的ip地址对缓存的影响
a. sessionLocal 只有在同源的情况下才能共享
b. sessionStorage 会话级缓存,生命周期仅在当前窗口或标签页
c. ip不同则会跨域
4.vueX基础
a. state => 存储数据 调用方法:$store.state
b.mutaions => 定义方法 调用方法:$store.commit
c.actions => 异步操作 调用方法:$store.dispatch
d.getters =>更改存储数据的值 调用方法: $store.getters
e.modules => 模块化 相当于一个新的store
5.promise对象
a.promise有三种状态 初始为pending,fulfilled,rejected,一旦状态改变后不会再改变
b.promise有两个回调函数,reject,resolve,状态fulfilled(成功)调用resolve,状态rejected(失败)调用reject
c. then方法处理resolve回调函数,catch放出处理rejected回调函数
d.promise.resolve() 不带参数则生成一个promise对象,状态为fulfilled
e.promise.reject() 生成一个promise对象,状态为rejected
f.promise.all() 接受多个promise对象为参数生成一个新的promise实例,当所有promise对象的状态为fulfilled才执行resolve,如果有一个promise对象的状态为rejected,则执行reject
g.promise.race()接收多个promise对象为参数生成一个新的promise实例,由第一个返回reject或resolve的实例的状态决定
6.微任务与宏任务,事件循环
a. 任务进入执行栈后同步任务会进入主线程,异步任务会进Event loop进行事件循环
b. 宏任务 :定时类任务如 setTimeout,setInterval,setImmediate(node.js)
c. 微任务 : promise.then promise.catch process.nextTick(node.js)
d. 当一个宏任务执行完毕后会先检索是否有可执行的微任务,没有的话再开始新的宏任务,这个过程就叫做事件循环
7.检测一个数组类型有几种方式
a. instanceof 操作符
示例:
console.log(arr instanceof Array)
b.prototype中的isPrototypeOf 判断某原型是否在指定实例的原型链上
示例:
console.log(Array.Object.isPrototypeOf(arr))
c.Objcet.getPrototyepOf 返回指定实例的原型
示例:
console.log(Object.getPrototyepOf(arr)=== Array.prototype)
d.constructor 每个实例的constructor都指向创建该实例的constructor
示例:
console.log(arr.constructor === Array)
e.Object.prototype.toString.call
Object中的tostring函数会返回 [Object,type],但Array中的tostring被重写,所以要Object.prototype.toString.call通过原型链调用
示例:
Object.prototype.toString.call(arr)
f.Array.isArray (IE8以下不支持)
示例:
Array.isArray(arr)