//1、typeof检测
/*var obg = {};
var ary = [];
var reg = /^$/;
var fn = function () {};
var num = 1;
var bool = true;
var nul = null;
var undef = undefined;
var str = "";
console.log(typeof obg);//"object"
console.log(typeof ary);//"object"
console.log(typeof num);//"number"
console.log(typeof reg);//"object"
console.log(typeof fn);//"function"
console.log(typeof bool);//"boolean"
console.log(typeof nul);//"object"
console.log(typeof undef);//"undefined"
console.log(typeof str);//"string"*/
//typrof不能具体细分是正则、数组、null、对象,因为用typeof检测的时候结果都是"object"
//2、instanceof检测,只要在实例的原型链上检测出来的结果都是true
//var num = 1;字面量方式创建
//console.log( 1 instanceof Number); ->false
//var num = new Number(1);实例方式创建
//console.log( num instanceof Number);->true
//var ary = [];
//console.log(ary instanceof Array);->true
//console.log(ary instanceof Object);->true
//var fn = function () {};
//console.log(fn instanceof Function);->true
//console.log(fn instanceof Object);->true
/*function Fn() {};
var ary = new Array;
Fn.prototype = ary;
var f = new Fn();
console.log( f instanceof Array);
console.log( f instanceof Fn)*/
//3、constructor 构造函数可以处理基本数据类型检测
/*var ary = [];
console.log( ary.constructor === Array);
var num = 1;
console.log(num.constructor === Number)*/
//4、Object.prototype.toString.call最准确最常用的方法
/*var ary = [];
var reg = /^$/;
var fn = function () {};
var num = 1;
var bool = true;
console.log(Object.prototype.toString.call(ary));->[object Array]
console.log(Object.prototype.toString.call(reg));->[object RegExp]
console.log(Object.prototype.toString.call(fn));->[object Function]
console.log(Object.prototype.toString.call(num));->[object Number]
console.log(Object.prototype.toString.call(bool));->[object Boolean]*/
原文:http://www.cnblogs.com/wuxianqiang/p/6445122.html