【 问】 instanceof, typeof有什么区别?
【答】js有两种数据类型,基本数据类型:string、boolean、number、undefined、null,引用数据类型object、array、function。typeof(typeof a)用于判断基本数据类型,null除外(null是基本数据类型的, 但typeof null却是object);instanceof (a instanceof b)用于判断引用数据类型的a是否为b的实例。
【测试1】
【扩展1】怎么实现一个instanceof ?
【答】该问题其实是在考察js原型链继承,Left instanceof Right就是判断Left是否为Right的实例(只要Right是Left的先辈,都是ture,不论是父子或爷孙关系) 。(对原型链不熟悉的看我之前写的这篇)
function InstanceOf(left, right){
var rightProto = right.prototype;
var leftProto = left.__proto__;
while (true) {
if(leftProto === null){
return false
}
if(leftProto === rightProto){
return true;
}
leftProto = leftProto.__proto__; //如果不是直接继承自父,再判断是否继承自爷...直到null为止
}
}