ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
##### 一、数据类型   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 } ``` 此封装函数返回的字符串为类型名称,可以直观的看到。