平凡之路。

JavaScript数据类型判断

Date: Author: ZJ

本文章采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可。

JavaScript中有5种基本数据类型:undefined,String,Boolean,Number,Null,以及一种复杂数据类型Object。日常工作中经常会有判断数据类型的需求,这里简单介绍下我平时判断数据类型的几种方式。

JavaScript中有5种基本数据类型:undefined,String,Boolean,Number,Null,以及一种复杂数据类型Object。日常工作中经常会有判断数据类型的需求,这里简单介绍下我平时判断数据类型的几种方式。

1. typeof操作符

语法

    typeof variable

对一个值使用typeof会返回如下字符串

  • ‘undefined’ 这个值未定义
  • ‘string’ 这个值是字符串
  • ‘object’ 这个值是对象或者null
  • ‘function’ 这个值是函数
  • ‘number’ 这个值是数值
  • ‘boolean’ 这个值是布尔值

example:

var a;
console.log(typeof a) // 'undefined'
var b = 123;
console.log(typeof b) // 'number'

typeof是一个操作符,并不是作为全局对象的一个方法存在的,所以尽管可以像typeof(123)这样调用,但圆括号并不是必须的。

2. instanceof操作符

当我们检测的数据类型是基本类型的时候,typeof能很好的满足我们的需求,但在检测引用类型的时候就显得有些力不从心了,通常我们并不是想知道某个值是对象,而是想知道它是什么类型的对象。因此,JavaScript提供了instanceof操作符。

语法

    result = variable instanceof constructor

如果这个值是给定引用类型的实例,那么instanceof操作符就会返回true,否则会返回false。

example:

var obj = {};
console.log(obj instanceof Object); //true
console.log(obj instanceof RegExp); //false

当使用instanceof检测基本类型时,会始终返回false

3. Object.prototype.toString.call(data)

instanceof操作符确实解决了类型判断的问题,但还是有一些不足之处。由于instanceof是根据数值原型链来识别数据类型的,但是JS中所有引用类型都是Object的实例,因此在检测一个引用类型的值与Object时,会始终返回true。此外,instanceof只能返回true/false,并不能直接返回数据的类型。因此,这里给大家介绍一种更直观的检测方式。

调用Object.prototypeto.String.call(data)会返回一个字符串,如

Object.prototype.toString.call(123) // "[object Number]"
Object.prototype.toString.call('123') // "[object String]"
Object.prototype.toString.call([123]) // "[object Array]"
Object.prototype.toString.call(/123/) // "[object RegExp]"

是不是很直观呢,为了方便使用,还可以做一些简单的处理,进一步的封装为一个函数,来供我们在开发中使用。

    function checkType(data) {
        return {}.toString.call(data).match(/[A-Z]\w+/)[0]
    };
    console.log(checkType(123))   // 'Number'
    console.log(checkType([123])) // 'Array'
    console.log(checkType(/123/)) // 'RegExp'
    console.log(checkType(null))  // 'Null'

4.小结

关于我在js中判断数据类型的方式,就到这里了。如果有什么其它的建议,欢迎指点,让大家互相交流,互相学习,一起进步!最后,祝大家节日快乐!


对于本文内容有问题或建议的小伙伴,欢迎在文章底部留言交流讨论。