JavaScript 实现一个判断数据类型的函数

实现效果

console.log(getType(123)); // number
console.log(getType('string')); // string
console.log(getType(true)); // boolean
console.log(getType(undefined)); // undefined
console.log(getType(null)); // null
console.log(getType({
    
    })); // object
console.log(getType([])); // array
console.log(getType(/123/)); // regexp
console.log(getType(new Date())); // date

实现过程

我们可以通过typeof来查看数据的类型,但是在 JavaScript 中,null、对象{}、数组[]、正则表达式/123/、日期new Date()都被认为是object,如下代码所示:

console.log(typeof 123); // number
console.log(typeof 'string'); // string
console.log(typeof true); // boolean
console.log(typeof undefined); // undefined
//----------------------------------------
console.log(typeof null); // object
console.log(typeof {
    
    }); // object
console.log(typeof []); // object
console.log(typeof /123/); // object
console.log(typeof new Date()); // object

此时若我们希望输入一个数组[],直接得到array这样的返回值,使用typeof就无法实现了。

那么如何直接得到array呢?

我们先来看下面一段代码:

console.log(Object.prototype.toString.call(null)); // [object Null]
console.log(Object.prototype.toString.call({
    
    })); // [object Object]
console.log(Object.prototype.toString.call([])); // [object Array]
console.log(Object.prototype.toString.call(/123/)); // [object RegExp]
console.log(Object.prototype.toString.call(new Date())); // [object Date]

可以看到,通过Object.prototype.toString.call(),将需要判断的数据类型放入call()中就可以得到需要的字符,如NullArrayRegExp等。

// 返回的是一个字符串
console.log(typeof Object.prototype.toString.call([])); // string

比如Object.prototype.toString.call([])返回[object Array],它是一个字符串,那么将这个字符串中除了Array以外的字符全删掉即可得到Array

// 字符串中除了 Array 以外的字符全删掉即可得到 Array
console.log(Object.prototype.toString.call([]).replace('[object ', '').replace(']', '')); // Array

为了和typeof的输出形式一致,将其返回的结果转化为小写即可。

// 转化为小写
console.log(Object.prototype.toString.call([]).replace('[object ', '').replace(']', '').toLowerCase()); // array

最后,将上述过程封装成自己的函数getType()

function getType(obj) {
    
    
    return typeof obj === 'object' ? Object.prototype.toString.call(obj).replace('[object ', '').replace(']', '').toLowerCase() : typeof obj;
}

首先判断typeof返回值是否为'object',若是则需要进行处理;若不是则直接返回即可。

验证

console.log(getType(123)); // number
console.log(getType('string')); // string
console.log(getType(true)); // boolean
console.log(getType(undefined)); // undefined
console.log(getType(null)); // null
console.log(getType({
    
    })); // object
console.log(getType([])); // array
console.log(getType(/123/)); // regexp
console.log(getType(new Date())); // date

完成!

猜你喜欢

转载自blog.csdn.net/Jack_lzx/article/details/111186210
今日推荐