1)、Object.prototype.toString.call() 所有类型都可以判断
Object.prototype.toString.call('abc') //[object String]
Object.prototype.toString.call(1) //[object Number]
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(){}) //[object Function]
Object.prototype.toString.call(['a','b','c']) //[object Array]
Object.prototype.toString.call({}) //[object Object]
2)、constructor ,null/undefined以外的所有类型都可以判断
true.constructor //[Function: Boolean]
a = 1; a.constructor //[Function: Number]
'abc'.constructor //[Function: String]
b = null/undefined
b .constructor //Cannot read property 'constructor' of null/undefined
{}.constructor //[Function: Object]
[].constructor //[Function: Array]
function(){}.constructor //[Function: Function]
3)、instanceof 只适合判断引用类型
{} instanceof Object //true
function(){} instanceof Object //true
function(){} instanceof Function //true
[] instanceof Array //true
[] instanceof Object //true
null instanceof Object //false
4)、typeof 只适合判断基本数据类型
typeof 'a' //string
typeof 1 //number
typeof true //boolean
typeof undefined //undefined
typeof null //object
typeof []/{}/function(){} //object
5)、如果是数组,可以用isArray()判断是不是数组
Array.isArray([1,2,3]) //true
Array.isArray({}) //false