从最垃圾的方式到最牛逼的方式依次排列为:typeof --> constructor --> instanceof --> toString
1.typeof
检测对象类型太过模糊,function、object、array类型都会返回object,所以此方法垃圾,但实用性很强,气场很强大
2.constructor
实例对象的构造函数 (实例对象.constructor),返回构造函数,可以分辨出类型
var str = 'abc';
var num = 100;
var arr = new Array();
var date = new Date();
alert(str.constructor);
alert(num.constructor);
alert(arr.constructor);
alert(date.constructor);
3.instanceof
判断一个对象是否是一个构造函数(类)的实例。注意此方法只能检测实例对象。返回布尔值
var str=new String('abc');
var num=new Number(100);
var arr=new Array();
var date=new Date();
alert(str instanceof String);
alert(num instanceof Number);
alert(arr instanceof Array);
alert(date instanceof Date);
alert(str instanceof Object);
4.toString()
最牛逼的五星级方法,此方法功能强大,既可以进制转换,又可以转字符串,使用起来逼格级高
console.log(Object.prototype.toString.call(5).slice(8,-1));
console.log(Object.prototype.toString.call('abc').slice(8,-1));
console.log(Object.prototype.toString.call(true).slice(8,-1));
console.log(Object.prototype.toString.call(function(){}).slice(8,-1));
console.log(Object.prototype.toString.call([]).slice(8,-1));
console.log(Object.prototype.toString.call({}).slice(8,-1));
console.log(Object.prototype.toString.call(/\d/g).slice(8,-1));
console.log(Object.prototype.toString.call(new Date).slice(8,-1));
console.log(Object.prototype.toString.call(null).slice(8,-1));
console.log(Object.prototype.toString.call(undefined).slice(8,-1));
console.log(Object.prototype.toString.call(Math).slice(8,-1));
// Number
// String
// Boolean
// Function
// Array
// Object
// RegExp
// Date
// Null
// Undefined
// Math