JS中准确判断变量的类型
typeof判断变量类型
用以判断基本变量类型, 对于复杂数据类型基本都返回object
console.log(typeof "hello"); // string
console.log(typeof 123); // number
console.log(typeof true); // boolean
console.log(typeof {}); // object
console.log(typeof []); // object
console.log(typeof undefined); // undefined
console.log(typeof null); // object
instanceof检查对象是否另一个对象的实例
instanceof可以用来判断一个变量是否是某个类的实例
console.log("hello" instanceof String); // false
console.log(new String("hello") instanceof String); // true
console.log([1, 2, 3] instanceof Array); // true
console.log({} instanceof Object); // false
通过Object.prototype.toString.call()方法,可以返回变量的类型
注意, 此方法不能用于判断undefined
类型
Object.prototype.toString.call('') ; // [object String]
Object.prototype.toString.call(1) ; // [object Number]
Object.prototype.toString.call(true) ; // [object Boolean]
Object.prototype.toString.call(Symbol()); // [object Symbol]
Object.prototype.toString.call(undefined) ; // [object Undefined]
Object.prototype.toString.call(null) ; // [object Null]
Object.prototype.toString.call(new Function()) ; // [object Function]
Object.prototype.toString.call(new Date()) ; // [object Date]
Object.prototype.toString.call([]) ; // [object Array]
Object.prototype.toString.call({}) ; // [object Object]
Object.prototype.toString.call(new RegExp()) ; // [object RegExp]
Object.prototype.toString.call(new Error()) ; // [object Error]
Object.prototype.toString.call(document) ; // [object HTMLDocument]
Object.prototype.toString.call(window) ; // [object Window]
Object.prototype.toString.call(/[abc]at/gi) // [object RegExp]
Object.prototype.toString.call(undefined) // [object Undefined]
总结
-
typeOf
能判断出一个变量的类型,但是只能判断出number,string,function,boolean,undefined,null
和其他对象类型返回结果都为object
. -
instanceof
能判断出一个对象是否是另一个类的实例。 -
Object.prototype.toString.call
能判断出所有变量的类型,返回值为[Object ***]
。
实现getValType函数
根据上面的分析,我们可以先用typeOf函数判断出基础类型number,string,function,boolean,undefined。然后如果结果是object,我们再用Object.prototype.toString.call来判断出具体的类型。
var getVarType = function (val) {
var type = typeof val
// object需要使用Object.prototype.toString.call判断
if (type === 'object') {
var typeStr = Object.prototype.toString.call(val)
// 解析[object String]
typeStr = typeStr.split(' ')[1]
type = typeStr.substring(0, typeStr.length - 1)
}
return type.toLowerCase()
}
var allVarMap = {
// 数字
num:123,
// Infinity
num1: 1 / 0,
// NaN
num2: null / 0,
// 字符串
str: 'abcdef',
// 布尔类型
bool: true,
// 数组
arr :[1, 2, 3, 4],
// json对象
json :{name:'wenzi', age:25},
// 函数
func:function(){ console.log('this is function'); },
// 箭头函数
func1: () => {console.log('arrow function')},
// undefined类型
und:undefined,
// null类型
nul:null,
// date类型
date:new Date(),
// 正则表达式
reg :/^[a-zA-Z]{5,20}$/,
// 异常类型
error:new Error()
}
var results = []
for (let i in allVarMap) {
results.push(getVarType(allVarMap[i]))
}
console.log(results.join())
// number,number,number,string,boolean,array,object,function,function,number,null,date,regexp,error
最后更新于 2023-05-10 15:50:04 并被添加「」标签,已有 544 位童鞋阅读过。
本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处
此处评论已关闭