浅谈JS判断类型的几个方法
1. typeof
只能判断基本数据类型(null除外),对应复杂类型如数组,对象判断不了,均返回Object
console.log(typeof '123') // string
console.log(typeof 123) // number
console.log(typeof true) // boolean
console.log(typeof false) // boolean
console.log(typeof null) // object
console.log(typeof undefined) // undefined
console.log(typeof Symbol('123')) // symbol
console.log(typeof {}) // object
console.log(typeof []) // object
console.log(typeof function(){}) // function
console.log(typeof new Date()) // object
console.log(typeof /abc/) // object
2. instanceof
instanceof 可以判断数组和对象,但是后面要跟Array才能判断,但对于基本类型一律返回false
console.log('123' instanceof String) // false
console.log(null instanceof Object) // false
console.log( {} instanceof Array) // false
console.log( [] instanceof Array) // true
console.log( {} instanceof Object) // true
console.log( ['a'] instanceof Object) // true
console.log( function(){} instanceof Function) // true
console.log (function(){} instanceof Object) // true
console.log ((new Date()) instanceof Object) // true
console.log ((new Date()) instanceof Date) // true
3. Array.isArray()
Array.isArray()判断类型是否为数组
console.log(Array.isArray([])) // true
console.log(Array.isArray({})) // false
console.log(Array.isArray('abc')) // false
console.log(Array.isArray(null)) // false
console.log(Array.isArray(undefined)) // false
console.log(Array.isArray(function(){})) // false
4. contructor属性
判断null和undefined时候报错
console.log('123'.constructor === Number) // false
console.log((123).constructor === Number) // true
console.log([].constructor === Array) // true
console.log({}.constructor === Array) // false
console.log([].constructor === Object) // false
console.log({}.constructor === Object) // true
console.log(/abc/.constructor === Object) // false
console.log(/abc/.constructor === RegExp) // true
console.log(null.constructor) // 报错
console.log(undefined.constructor) // 报错
5.Object.prototype.toString.call()
推荐
console.log(Object.prototype.toString.call(123)) // [object Number]
console.log(Object.prototype.toString.call('123')) // [object String]
console.log(Object.prototype.toString.call(true)) // [object Boolean]
console.log(Object.prototype.toString.call(null)) // [object Null]
console.log(Object.prototype.toString.call(undefined)) // [object Undefined]
console.log(Object.prototype.toString.call(Symbol('123'))) // [object Symbol]
console.log(Object.prototype.toString.call({})) // [object Object]
console.log(Object.prototype.toString.call([])) // [object Array]
console.log(Object.prototype.toString.call(() => {})) // [object Function]
console.log(Object.prototype.toString.call(new Date())) // [object Date]
console.log(Object.prototype.toString.call(new RegExp())) // [object RegExp]
console.log(Object.prototype.toString.call(new Error())) // [object Error]
console.log(Object.prototype.toString.call(new Map())) // [object Map]
console.log(Object.prototype.toString.call(new Set())) // [object Set]