typeof检测数据类型
检测数据类型,返回一个小写字母的类型字符串
简单数据类型:Undefined/null/boolean/Number/String
复杂数据类型:Object
instanceof检测对象之间的关联性
例子和实例,instanceof 左边一定是引用类型值,其实 instanceof 主要的实现原理就是只要右边变量的 prototype 在左边变量的原型链上即可。因此,instanceof 在查找的过程中会遍历左边变量的原型链,直到找到右边变量的 prototype,如果查找失败,则会返回 false,告诉我们左边变量并非是右边变量的实例。
Object instanceof Object //true
Function instanceof Function //true
Function instanceof Object //true
Foo instanceof Foo //false
Foo instanceof Object //true
Foo instanceof Function //true
由图可知,Object 的 prototype 属性是 Object.prototype, 而由于 Object 本身是一个函数,由 Function 所创建,所以 Object.__proto__ 的值是 Function.prototype,而 Function.prototype 的 __proto__ 属性是 Object.prototype,所以我们可以判断出,Object instanceof Object 的结果是 true 。
leftValue = Object.__proto__ = Function.prototype;
rightValue = Object.prototype;
// 第一次判断
leftValue != rightValue
leftValue = Function.prototype.__proto__ = Object.prototype
// 第二次判断
leftValue === rightValue
// 返回 true