A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

《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运算符。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马