JS数据类型的判断

一、数据类型

  基本类型和引用类型。基本类型: Number、Null、undefined、string、Boolean,引用类型: Object、Array(不考虑es6新定义的类型)

二、基本类型和引用类型的判断
var a = null  //(undefined、string、number、boolean)
a instanceof Object  //false
var b = []  //(array、object)
b instanceof Object  //true

   大的类型判断,一般想到typeof,但是typeof null 为Object,可以用instanceof,instanceof属于object方法,用于判断前部是否属于后部,也可以用Object(a) === a判断是否是引用类型(即对象)。但是判断属于基本类型和引用类型在实际场景中不多,更多的是希望判断细分类型。

三、细分类型的判断

   js 并没有原生的方法直接判断细分类型,可以用Object.prototype.toString方法进行判断,绑定this。

Object.prototype.toString.call(2) // "[object Number]"
Object.prototype.toString.call('') // "[object String]"
Object.prototype.toString.call(true) // "[object Boolean]"
Object.prototype.toString.call(undefined) // "[object Undefined]"
Object.prototype.toString.call(null) // "[object Null]"
Object.prototype.toString.call(Math) // "[object Math]"
Object.prototype.toString.call({}) // "[object Object]"
Object.prototype.toString.call([]) // "[object Array]"

利用这个特性,可以封装出一个比typeof运算符更准确的类型判断函数,至于为什么Object.prototype.toString() 会出现"[object xxxxx]"这个结果,可以看下这篇文章 http://www.cnblogs.com/ziyunfei/archive/2012/11/05/2754156.html。

var judgeFun1 = function(o) {
    var s = Object.prototype.toString.call(o)
    var os = s.slice(8).replace(']','')
    return os
}
或者
var judgeFun2 = function(o) {
    var s = Object.prototype.toString.call(o)
    var os = s.replace( /\[object\s([a-zA-Z]+)\]$/g, '$1')
    return os
}

此封装函数返回的字符串为类型名称,可以直观的看到。

你可能感兴趣的:(JS数据类型的判断)