实际项目应用中,我们会经常遇到判断数据类型的情况,以下为大家列出几种判断方法:
1. typeof
console.log(typeof '123') //"string"
console.log(typeof 123) //"number"
console.log(typeof true) //"boolean"
console.log(typeof {}) //"object"
console.log(typeof []) //"object"
console.log(typeof null) //"object"
console.log(typeof undefined) //"undefined"
console.log(typeof function(){}) //"function"
2. instanceof
检测函数的prototype是否在被检测对象的原型链上,如下,所以我们在检测所需数据类型只能是对象时,会存在错误
console.log([] instanceof Object, [] instanceof Array) //true,true Array.prototype.__proto__ === Object.prototype
console.log({} instanceof Object) //true
console.log((()=>{}) instanceof Function) // true Function.prototype.__proto__ === Object.prototype
console.log((()=>{}) instanceof Object) // true
3. 判断数组常用方法
console.log(Array.isArray([])) //true
console.log([] instanceof Array) //true
console.log([].constructor === Array) //true
console.log(Object.prototype.toString.call([]) === '[object Array]') //true
4. 判断对象常用方法
console.log(Object.prototype.toString.call({}) === '[object Object]') //true
console.log({}.constructor === Object) //true
console.log(obj instanceof Object) //true 除对象类型,数组函数判断也为true
console.log(typeof {} === "object") //true 除对象类型,数组函数及null判断也为true
在日常使用中除了判断数据类型外,还常会判断是否为空数组空对象,以下我列出了几种常用的方法:
1. 判断数组不为空
console.log( [] && [].length>0 ) //false
console.log(JSON.stringify([])!=="[]") //false
2. 判断对象不为空
console.log(Object.getOwnPropertyNames({}).length>0) //false
console.log(Object.keys({}).length>0) //false
console.log(JSON.stringify({})!=='{}') //false