instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上 返回布尔 但是obj的_proto_指向或者Foo.prototype属性值可能被重新赋值,如obj._proto_={},此时 obj instanceof Foo返回false;(目前的ES规范中,我们只能读取对象的原型而不能改变它)
typeof运算符返回一个字符串,表示操作数的类型 (null)除外 null返回也是object
从上面可以看出typeof和instanceof 都存在缺陷,所以如果想要完美的检测数据类型的话,推荐使用Object.prototype.toString.call()方法: