typeof
typeof一般只能返回如下几个结果:number,boolean,string,function,object,undefined字符串
对于Array,null等特殊对象使用typeof一律返回object,这正是typeof的局限性。
typeof表示是对某个变量类型的检测,基本数据类型除了null都能正常的显示为对应的类型,引用类型除了函数会显示为’function’,其它都显示为object。
1 | var fn = new Function ('a', 'b', 'return a + b') |
instanceof
instanceof适用于检测对象,它是基于原型链运作的。
instanceof 运算符用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性。换种说法就是如果左侧的对象是右侧对象的实例, 则表达式返回true, 否则返回false 。
instanceof对基本数据类型检测不起作用,因为基本数据类型没有原型链。可以准确的判断复杂数据类型。
1 | [1, 2, 3] instanceof Array // true |
Object.prototype.toString.call
可以检测各种数据类型,推荐使用。
1 | Object.prototype.toString.call([]); // => [object Array] |
1 | let isType = type => obj => { |
constructor
constructor也不是保险的,因为constructor属性是可以被修改的,会导致检测出的结果不正确。
1 | console.log([].constructor === Array) // true |