一、typeof 直接返回数据类型字段,但是无法判断数组、null、对象

typeof 1 "number"

typeof NaN "number"

typeof "1" "string"

typeof true "boolean"

typeof undefined "undefined"

typeof null "object"

typeof [] "object"

typeof {} "object" 其中 null, [], {}都返回 "object"

二、instanceof 判断某个实例是不是属于原型

// 构造函数 function Fruit(name, color) { this.name = name; this.color = color; } var apple = new Fruit("apple", "red");

// (apple != null) apple instanceof Object // true apple instanceof Array // false

三、使用 Object.prototype.toString.call()判断

call()方法可以改变this的指向,那么把Object.prototype.toString()方法指向不同的数据类型上面,返回不同的结果

function _typeof(obj){ var s = Object.prototype.toString.call(obj); return s.match(/[object (.*?)]/)[1].toLowerCase(); };

_typeof([12,3,343]); "array"

_typeof({name: 'zxc', age: 18}); "object"

_typeof(1); "number"

_typeof("1"); "string"

_typeof(null); "null"

_typeof(undefined); "undefined"

_typeof(NaN); "number"

_typeof(Date); "function"

_typeof(new Date()); "date"

_typeof(new RegExp()); "regexp"