<p><strong>javascript 判断数据类型的几种方法</strong><br><strong><em>1、typeof 直接返回数据类型字段,可是没法判断数组、null、对象</em></strong></p>javascript
typeof 1 "number" typeof NaN "number" typeof "1" "string" typeof true "boolean" typeof undefined "undefined" typeof null "object" typeof [] "object" typeof {} "object"
<p><strong><em>其中 null, [], {}都返回 "object"</em></strong></p> <p><strong>2、instanceof 判断某个实例是否是属于原型</strong></p>java
// 构造函数 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
<p><strong>3、使用 Object.prototype.toString.call()判断</strong></p> <p>call()方法能够改变this的指向,那么把Object.prototype.toString()方法指向不一样的数据类型上面,返回不一样的结果</p>segmentfault
Object.prototype.toString.call(1) "[object Number]" Object.prototype.toString.call(NaN); "[object Number]" Object.prototype.toString.call("1"); "[object String]" Object.prototype.toString.call(true) "[object Boolean]" Object.prototype.toString.call(null) "[object Null]" Object.prototype.toString.call(undefined) "[object Undefined]" Object.prototype.toString.call(function a() {}); "[object Function]" Object.prototype.toString.call([]); "[object Array]" Object.prototype.toString.call({}); "[object Object]"
<p><strong>最后咱们能够定义一个完美的判断数据类型的方法 _typeof()</strong></p>数组
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"