这两种方法主要判读基本类型和复杂类型的,
js主要由六中基本类型:number string boolean null undefined symbol(es6新增的)
使用typeof能够安全的操作基本数据除null之外(typeof null = “object”)
复杂类型则需要用instanceof
typeof 处理复杂类型时仅有两种结果 ‘function’ ‘object’
instanceof是基于原型链的 例如
function fn(){}
var a = new fn()
console.log(a instanceof fn) //true
//在复杂一点
function fn2(){}
fn2.prototype = new fn()
fn2.prototype.constructor = fn2
var b = new fn2()
console.log(b instance fn) //true
// b => b._proto_ =>fn2.prototype => fn2.prototype._proto_ =>fn.prototype
// fn => fn.prototype
// instance 的大概实现方式
function instance(a,b) {
while (a.__proto__) {
a = a.__proto__
b = b.prototype
if(a == b ){
return true
}
}
return false
}
a instanceof b主要判断 a是否是b的实例
原型链的知识补充:js中一切都是对象,粗略分为普通对象,函数对象,函数创造了对象。
任何对象都有_proto_,只有函数才有prototype属性。