js 类型判断
typeof
typeof 一般用于判断一个变量的类型。
例如:使用typeof 判断number、undefined、symbol、string、function、boolean、bingInt、object类型。
但判断object时不能明确那种对象。
let num = 12
console.log(typeof num); //number
let und = undefined
console.log(typeof und); //undefined
let str = 'test'
console.log(typeof str); //string
let sym = Symbol('test')
console.log(typeof sym); //symbol
let bol = true
console.log(typeof bol); //boolean
let fun = function(){
console.log('test');
}
console.log(typeof fun); //function
let bigI = 10n
console.log(typeof bigI); //bigint
let obj = {}
console.log(typeof obj); //object
let arr = []
console.log(typeof arr); //object
let nul = null
console.log(typeof nul); //object
注意:
基本类型除了null外都可以用typeof进行判断。
null
在 JavaScript 最初的实现中,JavaScript 中的值是由一个表示类型的标签和实际数据值表示的。
对象的类型标签是 0。由于 null 代表的是空指针(大多数平台下值为 0x00),因此,null 的类型标签是 0,typeof null 也因此返回 “object”。
instanceof
instanceof 运算符用来检测 construtor.prototype 是否出现在某个实例对象的原型链上。一般用来处理引用类型变量。
let num = 12
console.log(num instanceof Number); //false
let str = 'test'
console.log(str instanceof String); //false
let arr = []
console.log(arr instanceof Array); //true
let obj = {}
console.log(obj instanceof Object); //true
let fn = function(){
console.log('test');
}
let testFn = new fn()
console.log(testFn instanceof fn); //true
let date = new Date()
console.log(date instanceof Date); //true
constructor
constructor 可以判断数据类型,也可通过其访问构造函数。
注意
undefined、null 没有constructor属性
let num = 12
console.log(num.constructor === Number); //true
let bol = true
console.log(bol.constructor === Boolean); //true
let bigI = 10n
console.log(bigI.constructor === BigInt); //true
let sym = Symbol('aa')
console.log(sym.constructor === Symbol); //true
let str = 'test'
console.log(str.constructor === String); //true
let obj = {}
console.log(obj.constructor === Object); //true
let arr = []
console.log(arr.constructor === Array); //true
let fn = function(){
}
console.log(fn.constructor === Function); //true
Object.prototype.toString
使用该方法也可进行类型判断。
let checkType =
(type)=> Object.prototype.toString.call(type)
let num = 12
console.log(checkType(num)); //[object Number]
let bol = true
console.log(checkType(bol)); //[object Boolean]
let bigI = 10n
console.log(checkType(bigI)); //[object BigInt]
let sym = Symbol('aa')
console.log(checkType(sym)); //[object Symbol]
let str = 'test'
console.log(checkType(str)); //[object String]
let und = undefined
console.log(checkType(und)); //[object Undefined]
let nul = null
console.log(checkType(nul)); //[object Null]
let obj = {}
console.log(checkType(obj)); //[object Object]
let arr = []
console.log(checkType(arr)); //[object Array]
let fn = function(){
}
console.log(checkType(fn)); //[object Function]
使用该方法可以判断基本数据类型以及引用数据类型。
类型提取
我们可以对结果进行正则将类型提取出来。
let regex = /\[object (\w+)\]/
let checkType =
(type)=> Object.prototype.toString.call(type).replace(regex,"$1").toLowerCase()
//将结果字符串[object Number]中的Number 替换成结果即 Number 然后取小写格式
// 根据正则能够匹配整个结果字符串,同时用()内部的字符串代替整个结果字符串
let num = 12
console.log(checkType(num)); // number