1.基本类型与引用类型
基本类型(也称为原始类型或原始数据类型)共包含7种:
Number、String、Boolean、Undefined、Null、BigInt和Symbol。
引用类型(也被称为对象类型)包括Object、Array、Function,以及更复杂的用户定义类型。
2.typeof是一个操作符,是语言的一个内置特性:用来判断基本类型
模拟typeof的行为代码如下:
function myTypeOf(value) {
if (value === null) {
return 'null';
}
if (typeof value === 'undefined') {
return 'undefined';
}
if (typeof value === 'string') {
return 'string';
}
if (typeof value === 'number') {
return 'number';
}
if (typeof value === 'boolean') {
return 'boolean';
}
if (typeof value === 'function') {
return 'function';
}
}
console.log(myTypeOf(null)); // 'null'
console.log(myTypeOf(undefined)); // 'undefined'
console.log(myTypeOf('summer')); // 'string'
console.log(myTypeOf(18)); // 'number'
console.log(myTypeOf(true)); // 'boolean'
console.log(myTypeOf(function(){}))// function
3.instanceof 是一个运算符,帮助我们确定一个对象是否“属于”某个类或者构造函数。
实现原理,代码如下:
function myInstanceOf(obj, constructor){
let current = obj;
while(current) {
if(current.__proto__ === constructor.prototype) {
return true;
}
current = current.__proto__;
}
return false;
}
const arr1 = [1]
const obj1 = {a: 1}
console.log(myInstanceOf(arr1, Array))// true
console.log(myInstanceOf(obj1, Array)) // false
4.总结两个的区别:
(1)适用范围
- typeof 适用于基本类型和函数。*注意 typeof(null) // object。历史遗留原因
- instanceof 适用于引用类型,基于原型链区分类型
(2)返回值
- typeof 返回一个表示类型的字符串。
- instanceof 返回一个boolean,表示对象是否是特定构造函数的实例。
(3)原型链
- typeof 不涉及原型链
- instanceof 检查对象的[[Prototype]]链来确定对象是否是特定构造函数的实例。