1.继承
2.判断数组
console.log(Array.isArray(arr)); //true
console.log(arr instanceof Array); //true
console.log(arr.constructor === Array); //true
console.log(Array.prototype.isPrototypeOf(arr)); //true
3.vue 响应式 ,
vue2 使用 defineProperty get set来实现 使用$set 和 $delete
无法跟踪到对象增加新值,删除属性
数组需要额外处理
vue3 使用new Proxy实现
可以很完备的监听到属性增加和删除,
数组可以原生使用api,不需要再对需要监听的api再做处理
4.vue 组件通信
props / emit
provide/inject
ref/refs
event/Bus
Vuex
state:用于数据的存储,是 store 中的唯一数据源
getters:如 vue 中的计算属性一样,基于 state 数据的二次包装,常用于数据的筛选和多个数据的相关性计算
mutations:类似函数,改变 state 数据的唯一途径,且不能用于处理异步事件
actions:类似于 mutation,用于提交 mutation 来改变状态,而不直接变更状态,可以包含任意异步操作
modules:类似于命名空间,用于项目中将各个模块的状态分开定义和操作,便于维护
parent/children
5.同步异步事件循环
简单分为同步任务和异步任务,同步任务执行完毕再执行异步任务
首先异步任务的dispatch是使用队列实现的,即FIFO,但是异步任务还需要细分为微任务和宏任务
微任务:
Promise.then
MutaionObserver
Object.observe(已废弃;Proxy 对象替代)
process.nextTick(Node.js)
await是微任务
宏任务:
script (可以理解为外层同步代码)
setTimeout/setInterval
UI rendering/UI事件
postMessage、MessageChannel
setImmediate、I/O(Node.js)
如果有微任务就先执行微任务,没有的话再执行宏任务,当这个宏任务执行完之后再去检查微任务
6.缓存
发送请求之前先检查本地缓存的请求结果和缓存标识,缓存标识是上一次响应的响应头所提供的
分别是强制缓存和协商缓存。
没有缓存发送请求,没失效就不发送请求,失效就协商缓存
发送给服务器,协商一下看看能不能用缓存的内容,生效返回304,失效返回200和新的内容
7.重绘/回流
回流是计算位置和大小
重绘是修改颜色等不影响位置和大小的其他内容