1、判断数据类型首先要知道都有哪些数据类型。
第一种、typeof
语法:
// 简单数据类型
console.log(typeof 1) // number
console.log(typeof "s") // string
console.log(typeof true) //boolean
console.log(typeof null) //object
console.log(typeof undefined) // undefined
// 引用数据类型
console.log(typeof {}) // object
console.log(typeof []) // object
console.log(typeof /^123$/) //object
console.log(typeof function () {}) //function
console.log(typeof new Date());// object
判断一个变量是什么类型的。
注意:尽量用来判断简单数据类型,除了null,null判断出来是object,判断引用类型的除了function都会返回object
第二种、instanceof
语法:
// 简单数据类型
console.log(1 instanceof Number) // false
console.log("222" instanceof String) // false
console.log(false instanceof Boolean) // false
console.log(null instanceof Null) // 报错
console.log(undefined instanceof Undefined) // 报错
// 引用数据类型
console.log({} instanceof Object) // true
console.log([] instanceof Array) // true
console.log(/^123$/ instanceof RegExp) //true
console.log(function () {} instanceof Function) //true
console.log(new Date() instanceof Date);// true
我们可以用instanceof判断一个变量是否是简单类型,还是复杂类型
注意:判断null 和undefined 是会报错
第三种、constructor
根据对象的constructor判断,返回对创建此对象的数组函数的引用。
// 简单数据类型
let num = 1;
console.log("str".constructor === String) // true
console.log(num.constructor === Number) // true
console.log(true.constructor === Boolean) // true
console.log(null.constructor === Null) // 报错
console.log(undefined.constructor === Undefined) // 报错
// 引用数据类型
console.log({}.constructor===Object); // true
console.log([].constructor===Array);// true
console.log(/^123$/.constructor===RegExp);// true
console.log(function(){}.constructor===Function);// true
console.log(new Date().constructor===Date()); // false
//注意: constructor 在类继承时会出错
第四种、prototype
所有数据类型均可判断:Object.prototype.toString.call
这是对象的一个原生原型扩展函数,用来更精确的区分数据类型。
// 简单数据类型
let getType = Object.prototype.toString;
console.log(getType.call("aaa")) // [object String]
console.log(getType.call(1)) // [object Number]
console.log(getType.call(true)) // [object Boolean]
console.log(getType.call(null)) // [object Null]
console.log(getType.call(undefined)) // [object Undefined]
// 引用数据类型
console.log(getType.call({})); // [object Object]
console.log(getType.call([])); // [object Array]
console.log(getType.call(/^123$/)); // [object RegExp]
console.log(getType.call(function () {})); // [object Function]
console.log(getType.call(new Date()).replace(/^\[object (\S+)\]$/, '$1')); // Date
// 正则
// replace(/^\[object (\S+)\]$/, '$1')) 用来提取我们想要的类型
我们可以建立一个正则表达式,来捕捉我们需要的字段
注意:返回的是字符串
补充:Array.isArray(obj)
判断一个变量是否是数组。如果是数组,返回true。否则返回false
语法:
Array.inArray(变量)