1. 基本类型有哪几种?null 是对象吗?基本数据类型和复杂数据类型存储有什么区别?
- 基本类型有6种,分别是Undefined,Null,Bool,String,Number,Symbol(ES6新增)。 另外ES10新增一个 BigInt 的数据类型
- 虽然 typeof null 返回的值是 object,但是null不是对象,而是基本数据类型的一种。
- 基本数据类型存储在栈内存,存储的是值。
- 复杂数据类型的值存储在堆内存,地址(指向堆中的值)存储在栈内存。当我们把对象赋值给另外一个变量的时候,复制的是地址,指向同一块内存空间,当其中一个对象改变时,另一个对象也会变化。
2. typeof 是否正确判断类型? instanceof呢? instanceof 的实现原理是什么?
首先 typeof 能够正确的判断基本数据类型,但是除了 null, typeof null输出的是对象。
但是对象来说,typeof 不能正确的判断其类型, typeof 一个函数可以输出 ‘function’,而除此之外,输出的全是 object,这种情况下,我们无法准确的知道对象的类型。
instanceof可以准确的判断复杂数据类型,但是不能正确判断基本数据类型。(正确判断数据类型请戳:github.com/YvetteLau/B…)
instanceof 是通过原型链判断的,A instanceof B,