实现typeof
typeof 后面跟一个操作数,返回一个小写字母的类型字符串。
为什么用Object.prototype.toString.call(obj)检测对象类型?
深入理解Object.prototype.toString.call()
对于为什么不能是Object.toString() or obj.prototype.toString()?看完上面两篇文章和下图就能理解。
typeof Object.prototype ==‘object’
const mytypeof=function(obj){
return Object.prototype.toString.call(obj).slice(8,-1).toLowerCase();
}
console.log(mytypeof('123'));
实现instanceof
instanceof两个操作数,返回布尔值。
typeof缺陷:用typeof检查object、null、array、Date都会返回字符串’object’ 。(检查function 会返回function)
Function instanceof Function(返回true)
Function insatanceof Object(也返回true)
A instanceof B用来判断A是否是B的实例,返回布尔值。instanceof左边的操作数一定得是引用类型,不然返回false。
const myinstanceof=(fn,Fn)=>{
let p=fn.__proto__;
while(p){
if(p===Fn.prototype){
return true;//实例的原型等于构造函数的原型对象,即A是B的实例
}
p=p.__proto__;//顺着原型链查找
}
return false;
}
console.log(myinstanceof(Function,Function))