1、typeof
- 只能识别基础类型和引用类型
注意:null
、 NaN
、 document.all
的判断
console.log(typeof null); // object
console.log(typeof NaN); // number
console.log(typeof document.all); // undefined
2、constructor
constructor
指向创建该实例对象的构造函数
注意 null
和 undefined
没有 constructor
,以及 constructor
可以被改写
String.prototype.constructor = function fn() {return {};
};
console.log("云牧".constructor); // [Function: fn]
3、instanceof
- 语法:
obj instanceof Type
- 功能:判断
obj
是不是Type
类的实例,只可用来判断引用数据 - 实现思路:
Type
的原型对象是否是obj
的原型链上的某个对象 - 注意:右操作数必须是函数或者 class
手写 instanceof
:
function myInstanceof(Fn, obj) {// 获取该函数显示原型const prototype = Fn.prototype;// 获取obj的隐式原型let proto = obj.__proto__;// 遍历原型链while (proto) {// 检测原型是否相等if (proto === prototype) {return true;}// 如果不等于则继续往深处查找proto = proto.__proto__;}return false;
}