1. 原型与原型链
对象: 具备__proto__ proto.constructor === 对象的构造函数 函数: 具备 prototype, prototype.constructor === 函数自身
结合一些基本原理: 一切函数的构造函数, 都是 Function 一切对象的构造函数,都是Object Object、Function(作为函数)的构造函数,也是Function; Function(函数作为特殊对象)的prototype(作为对象) 的构造函数是Object; Function(函数作为特殊对象)的prototype(作为对象) 的构造函数是 null.
2. 事件循环
3. undefined 和 null
3.1 undefined 的 三重含义?
-
undefined 表示 undefined 类型,同 string / number 一样, 同为 js 的基本数据类型。而 undefined 类型只有唯一的值 即 undefined 的原始值。
-
undefined 在我们通常使用时,一般指的就是 undefined 的原始值,可以理解为globalThis.undefined的省略写法。
-
错误用法-- “作为变量名”, undefined本身并没有被js 设计为 关键字,或者定义为字面量,因此,undefined 完全可以作为变量名使用, 即我们在非全局作用域里面,理论上可以定义 let undefined = 'balabala'。
tips: 恰恰因为第三点,导致了许多 undefined 造成的二义性问题,因此对于一些开源项目,会采用其他方式是实现undefined 原始值的使用, 如最常用的 void 0 获取 globalThis.undefined .
3.2 null
3.3 undefined 和 null 的 区别和 关联
null == undefined // true
null !== undefined // true
null === undefined //false
typeof null // 'object' // 除 null 之外,所有的基本数据类型,typeof 都返回自身的类型
typeof undefined // 'undefined'