《JavaScript权威指南(第六版)》中提到: JavaScript中的数据类型分为两类:原始类型(primitivetype)和对象类型(objecttype)。 JavaScript中有两个特殊的原始值:null(空)和undefined(未定义),它们不是数字、字符串和布尔值。它们通常分别代表了各自特殊类型的唯一的成员。 JavaScript中除了数字、字符串、布尔值、null和undefined之外的就是对象了。也就是说,我们也可以把JavaScript中的数据类型分为三类: (1)原始类型,包括:数字、字符串和布尔值; (2)特殊类型,包括:null和undefined (3)对象类型,包括除上述两种类型之外的所有其他类型 其实,跟我们平时所看到的:JavaScript中数据类型有5种是一个道理,只不过更加细化了而已!那我们该如何来对这些数据类型进行区分呢?本文的主要内容讲判断JavaScript中数据类型的方法。
1.使用typeof运算符 首先,我们知道typeof是一元运算符,放在其单个表达式的前面,返回值为表示表达式类型的一个字符串。 typeof运算符有两种语法格式: ·(1)typeof"itcast" ·(2)typeof("itcast") 上面提到:使用typeof运算符得到的结果为字符串,即: console.log(typeof(typeof(true))); // "string"
注:上述表格为typeof运算符,判断数据类型得到的结果。 其中,有几点是迷惑我们的: ·(1)Null类型,使用typeof获得的结果为object; ·(2)任意函数,使用typeof获得的结果为function。 另外,对所有对象使用typeof,结果都是object:
既然typeof运算符无法准确地判断出对象类型,那我们在想获取对象的准确数据类型时,就不能使用typeof运算符了。但是,我们还是想获取其准确的数据类型,怎么办呢?接着往下看。
2.使用toString方法 我们知道,所有的对象都具有一个toString方法,比如:
需要注意的是,不是1.toString(),因为对数字1来说,如果这么做则表示小数,因此后面必须跟一个数字,但是这里是toString,就会报出语法错误! 所有的对象都有toString方法,那这个方法肯定是Object.prototype提供的,因为所有的对象都继承自Object!但是,我们发现对象字面量调用toString方法后的结果,有点特殊!那么是否可以借用一下这个toString方法呢?
需注意的是:使用toString.call()或者Object.prototype.toString.call() 效果相同。这样的话,岂不是所有的数据类型,都可以使用toString方法来进行判断了?那自定义类型呢?
到目前为止,除了自定义类型之外,其他的所有数据类型我们已经可以进行判定了! ·(1)对于基本数据类型(数字、字符串、布尔、Null、Undefined)来说,我们可以使用typeof或者toString.call方法; ·(2)对于复杂数据类型(内置对象,除了自定义类型),可以使用toString.call方法。 现在的问题就只有:自定义类型了!天无绝人之路,还有利器没用上呢! 3.使用instanceof运算符 instanceof运算符的作用:用来检测原型对象是否存在于某个对象的原型链上。 基本语法:
也就是说,如果constructor.prototype在object的原型链上,此时,result结果是:true,否则为:false。
用这种方式,我们通过其返回值,就能知道自定义类型的具体类型了! 总结 本文对JavaScript中的数据类型判断,进行了分析,并得出如下结论: ·1.对于基本数据类型,可以使用typeof或者toString.call方法; ·2.对于复杂数据类型(内置对象,除了自定义类型),可以使用toString.call方法; ·3.对于自定义类型,可以使用instanceof运算符。
|