typeof
console.log(typeof x) // undefined
console.log(typeof 10) // number
console.log(typeof '123') // string
console.log(typeof true) // boolean
console.log(typeof null) // object
console.log(typeof function() {}) // function
console.log(typeof [1,'a', true]) // object
console.log(typeof {}) // object
console.log(typeof new Number(10)) // object
console.log(typeof new String('123')) // object
以上代码列出来 typeof 的类型标识。
undefined、number、string、boolean 属于简单的值类型。
剩下的几种情况
函数、数组、对象、null、new String() 都是对象。属于引用类型
instanceof
对于值类型,通过 typeof 判断 。但是 typeof 在判断到引用类型时,返回值有object/function。这时就区分不出是数组、对象还是new String().
instanceof 不适合检测一个对象本身的类型. instanceof 检测一个对象A是不是另一个对象B的实例
function Foo(){ }
var f1 = new Foo()
console.log(f1 instanceof Foo); // true
console.log(f1 instanceof Object); // true
instanceof 的判断规则,如下图
Instanceof 运算符的第一个变量是一个对象,暂定为A;第二个变量一般是一个函数,暂定为B
Instanceof 的判断规则是: 沿着A的__proto__找,同时沿着B的prototype这条线来找,如果两条线能找到同一个引用,即同一个对象,那么返回true。如果找到终点还未重合,则返回false