typeof():只能判断基础数据类型,引用数据类型就不行,无法区分数组与对象(都显示为object类型)
instanceof()
constructor
Object.prototype.toString.call():最完美的方法
// typeof () 对于基本数据类型没问题,遇到引用数据类型就不管用
console.log( typeof 666 ) //number
console.log( typeof [1,2,3] ) //object
// instanceof () 只能判断引用数据类型,不能判断基本数据类型
console.log( [] instanceof Array ) //true
console.log( 'abc' instanceof String ) //false
// constructor 几乎可以判断基本数据类型和引用数据类型;如果声明了一个构造函数,并把它的原型指向了Array,则判断不出
console.log( ('abc').constructor === String ) //object
// Object.prototype.toString.call()
var opt = Object.prototype.toString
console.log( opt.call(2) ) //[object Number]
console.log( opt.call(true) ) //[object Boolean]
console.log( opt.call('aaa') ) //[object String]
console.log( opt.call([]) ) //[object Array]
console.log( opt.call({}) ) //[object Object]