JS 判断数据类型
众所周知JS的数据类型原来有七种,ES2020 引入了一种新的数据类型 BigInt(大整数),所以共有8种
使用typeof
/**5个基本**/ console.log(typeof 'str') // > string console.log(typeof 1) // > number console.log(typeof true) // > boolean console.log(typeof Symbol()) // > symbol console.log(typeof 123n) // > bigint /**2个空**/ /*undefined未定义,变量不存在或者变量定义后没赋值*/ console.log(typeof undefined) // > undefined /*null*/存在变量,但是值被赋予了null(空) console.log(typeof null) // > object /**对象类型**/ console.log(typeof {}) // > object console.log(typeof []) // > object console.log(typeof function(){}) // > function
可以看到,对于5个基本类型和undefined使用时效果正常,其他都效果不佳。
Object.prototype.toString.call()
let [ string, number, boolean, symbol, bigint, unde, nu, object, array, fun ] = ['string', 1, true, Symbol(), 123n, undefined, null, {}, [], function(){}] let value = [string,number,boolean,symbol,bigint,unde,nu,object,array,fun] value.forEach((ele) => { let toString = Object.prototype.toString.call(ele) console.log(toString) }) // [object String] // [object Number] // [object Boolean] // [object Symbol] // [object BigInt] // [object Undefined] // [object Null] // [object Object] // [object Array] // [object Function]
我们可以看到,Object.prototype.toString.call()的方法返回的字符串可以稳定的得出是何种数据类型。
用是否为目标构造函数实例的方式判断类型
instanceof 已知对象类型来用(查到父级和以上)
console.log(object instanceof Object) console.log(fun instanceof Function) console.log(array instanceof Array) // 都为true
只能用于对象类型的判断
constructor,(查到父级结束)
console.log(array.constructor === Array) // true console.log(object.constructor === Object) // true console.log(fun.constructor === Function) // true
也可以对Date日期等类型使用。