一、利用typeof 判断基本数据类型
数字、字符串、布尔等基本类型可以由typeof进行判断,复杂数据类型大多都被认为是对象
注:undefined可以判断,null则被视为空对象
typeof 1 //number
typeof 'a' //string
typeof true //boolean
typeof undefined //undefined
typeof null //object null空对象
typeof arr //object
typeof {} //object
typeof alert //function 函数对象
二、利用instanceof区分Object和Array
instanceof运算符用于通过查找原型链来检测某个变量是否为某个类型数据的实例
arr instanceof Array === true //arr是Array的实例
[1,2,3] instanceof Array //true
[1,2,3] instanceof Object //true
{a:1} instanceof Object //true
但是由于Array也是继承于Object的,所以这样是无法精准区分的
所以我们采用判断其构造函数的方法判断其本身
let arr = [1,2,3]
let obj = {a:1}
arr.constructor === Array //true
arr.constructor === Object //false
obj.constructor === Array //false
obj.constructor === Object //true
三、使用 Object.prototype.toString.call() 方法来揭示类型!
最复杂最精准的方法
Object.prototype.toString.call(1) //[Object,Number]
Object.prototype.toString.call('a') //[Object,String]
Object.prototype.toString.call(true) //[Object,Boolean]
Object.prototype.toString.call([1,2,3]) //[Object,Array]
Object.prototype.toString.call({a:1}) //[Object,Object]
Object.prototype.toString.call(null) //[Object,Null]
Object.prototype.toString.call(undefined) //[Object,Undefined]