JavaScript中的数据类型检测问题

在JavaScript中,数据的类型检测问题是一个非常常见的问题,现在总结一下,总的来说,有如下方法:typeof、instanceof、Object.prototype.toString、constructor。

一、typeof

这个方法是最基本的方法,可以满足一般的类型判断需要,用法如下:

typeof 123   //"number"
typeof NaN  //"number"
typeof "adb" //"string"
typeof undefined //"undefined"
typeof function(){} // "function"
typeof null //"object"
typeof []  //"object"
typeof new Object() //"object"
如上所述,typeof无法区分 null、数组、对象。因为对它们的运算的结果均为 “object”,我们可以使用instanceof方法来区分。

二、instanceof

这个方法用于判断一个变量是否是某个对象的实例,如 var a= new Array(),则 a instanceof Array 的值为true。  而var obj = new Object();obj instanceof Object 的值为false,这样我们就区分出了  对象和数组了,但是 应该知道  a instanceof Object  的值也为true 因为  Array是继承自Object.prototype 的。

instanceof  还有一个问题,在不同window或 iframe间的对象类型检测是不行的,例如 在一个iframe中var  arr = new Array(),在另一个iframe中  arr instanceof Array的值为是false,而不是true。  那怎么办呢,我们可以使用  Object.prototype.toString 方法。

三、Object.prototype.toString

这个方法可以有效地用于判断一个数据的类型,它的用法如下:

Object.prototype.toString.apply(123) === "[object Number]"
Object.prototype.toString.apply("abc") === "[object String]"
Object.prototype.toString.apply(undefined) === "[object Undefined]"
Object.prototype.toString.apply(true) === "[object Boolean]"
Object.prototype.toString.apply({}) === "[object Object]"
Object.prototype.toString.apply([]) === "[object Array]"
Object.prototype.toString.apply(function(){}) === "[object Function]"
Object.prototype.toString.apply(null) === "[object NUll]"


如上所述,这个方法几乎是完美的,所有不同的数据类型返回的结果都是不一样的,这可以彻底解决数据类型的判断问题,但是有一点要注意,就是在IE6/7/8中,

Object.prototype.toString.apply(null)的结果是 [object Object]。

四、constructor 方法

我们知道构造函数的原型对象中,有一个constructor属性,它的值就是构造函数的名字,例如,new foo(){},var obj = new foo,则  obj.consrructor===foo。我们可以通过这个方法来判断 obj就是 foo的一个实例。这个方法一般用于判断一个对象是谁的实例。对于判断非对象类型就不能用了。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值