1. typeof null?null instanceof Object?

“object”,false。null instanceof Object 和 typeof null 都是 js 错误的设计。

2. typeof 可以判断哪些类型?instanceof 做了什么?

typeof 可以判断 number、boolean、symbol、string、object、undefined、function。无法判断 Date、RegExp 等复杂的对象。
这是 instanceof 的用法,但是 instanceof 的原理是什么呢?根据 ECMAScript 语言规范,我梳理了一下大概的思路,然后整理了一段代码如下
其实 instanceof 主要的实现原理就是只要右边变量的 prototype 在左边变量的原型链上即可。因此,instanceof 在查找的过程中会遍历左边变量的原型链,直到找到右边变量的 prototype,如果查找失败,则会返回 false,告诉我们左边变量并非是右边变量的实例。

3. event loop事件循环

event loop不同的宿主环境有不同的表现。

浏览器里,event loop分为macro task和micro task。loop从一个宏任务开始,先将执行栈中的任务清空,再将微任务推到执行栈中并清空,之后检查是否存在宏任务,若存在则取出一个宏任务,执行完成检查是否有微任务,以此循环。

node中,为了保证时间函数到点执行,每一个event loop都会先检测setTimeout是否到期。以及新增nextTrick,再当前eventLoop结束时执行的回调,而当前注册的setImmediate事件将在下次event loop执行。

两者区别,浏览器会将微任务插入到当前宏任务执行栈中,微任务和当前宏任务属于一次event loop。而node中,会先清空当前任务队列,再将微任务加入任务队列,执行时机可能是下次event loop。

宏任务,有脚本执行,setTimeout等函数,用户交互等,ajax,I/O。微任务,有promise,await async,mutation,intersectionObserver,postMessage,process.nextTrick等。

4. 实现一个sum函数满足