配色: 字号:
检测JavaScript数据类型之终极解决方案
2018-09-25 | 阅:  转:  |  分享 
  
检测JavaScript数据类型之终极解决方案—黑马程序员JavaScript的数据类型检测是我们平时开发中经常会遇到的场景,小到基本数据
类型大至各种引用数据类型的检测,都是我们需要掌握的知识点。红宝书告诉我们,JavaScript中的数据类型有Undefined
、Null、Boolean、Number、String、Object,其中前五种是基本类型,而Object是引用类型。实际上,
Object中还包含了其它更为具体的引用类型,如Array、Function、Date、RegExp、Error、Argume
nts等。在本章的叙述中,我都会以上述12种数据类型为基础来说明不同的检测方式(实际上JavaScript中数据类型不止
12种,其它数据类型我们鲜少碰到,所以在此就不多做赘述啦)。我们通常用来检测数据类型的方法,分别是typeof和Obje
ct.prototype.toString,让我们仔细来看看这两个方法。typeofMDN中的叙述是,typeof操作符返回一
个字符串,表示未经计算的操作数的类型。其使用方式是typeofoperand或typeof(operand),operan
d是一个表达式,表示对象或原始值,其类型将被返回,返回值是表示其数据类型的字符串的小写形式。那么让我们直接来看一下上述的12
种数据类型使用typeof来检测后返回值分别是什么:可以看到,使用typeof方法来检测数据类型,基本类型大部分都能被准确
检测并返回正确的字符串(除了Null类型,其返回object字符串),而引用类型大部分都不能够被准确检测(除了Funct
ion类型能够准确返回function字符串外,其它的都返回了object字符串)。由此可得,typeof方法并不能够
完全精准地检测出上述JavaScript中的12中数据类型。Object.prototype.toStringES5规范
中是这么描述Object.prototype.toString的:可以知道,Object.prototype.toString
最终会返回形式如[object,class]的字符串,class指代的是其检测出的数据类型,这个是我们判断数据类型的关键。
同样的,让我们来看下使用Object.prototype.toString来检测上述列举到的12种数据类型都会返回什么样的
结果:vartoString=Object.prototype.toString;console.log(toString.ca
ll(und));//[objectUndefined]console.log(toString.call(nul));
//[objectNull]console.log(toString.call(boo));//[objectBoo
lean]console.log(toString.call(num));//[objectNumber]console.
log(toString.call(str));//[objectString]console.log(toString.
call(obj));//[objectObject]console.log(toString.call(arr));
//[objectArray]console.log(toString.call(fun));//[objectFun
ction]console.log(toString.call(date));//[objectDate]console.
log(toString.call(reg));//[objectRegExp]console.log(toString.
call(err));//[objectError]console.log(toString.call(arg));/
/[objectArguments][color=rgba(140,140,140,0.8)]可以看到,Object.p
rototype.toString返回的[object,class]字符串中,class准确的表示了各个数据的类型,与t
ypeof不同的是,class所代表的数据类型字符串首字母是大写的,而不像typeof返回的是小写字符串。数据类型检测终极
方法通过上述对两个检测数据类型方法的介绍,我们知道typeof能够被用来检测除Null类型外的其它基本类型,并且能够检测出
引用类型中Function数据类型,而Object.prototype.toString能够检测出所有的数据类型,所以我们
可以结合这两个方法来实现一个JavaScript数据类型检测的终极方法。数据类型的单独检测有时我们希望直接判断一个数据是否是某个类型,那么我们可以单独实现这些判断某个数据类型的函数,这里直接给出各个函数的实现代码,需要的童鞋可以直接使用。
献花(0)
+1
(本文系大大的大大...首藏)