判断JavaScript的类型

转载http://topic.csdn.net/u/20100610/13/C098DD3B-1AEF-426E-AC16-59B3A32CBC21.html

先说说数据类型的分析:
1. 数据类型  
javascript中包含6种数据类型:undefined、null、string、number、boolean和object。其中,前5种是原始数据类型,object是对象类型。  
object类型中包括Object、Function、String、Number、Boolean、Array、Regexp、Date、Globel、Math、Error,以及宿主环境提供的object类型。  
2. 类型判断  
通常在javascript中进行类型判断主要通过3种方式:typeof、instanceof、constructor。  
2.1 typeof  
typeof操作可能返回的类型为undefined、object、number、string、function、boolean。但是会有一些情况并不能完全判断准确。比如typeof new String('')的值为object。  
2.2 constructor  
有时候我们可能会很偷懒的使用a.constructor == String进行类型判断,但是constructor其实是不靠谱的东西。因为当我们调用a.constructor的时候,内部操作其实是ToObject(a).prototype.constructor(ToObject是什么,看下文分解)。  
看下面一段代码就能明白:  
String.prototype.constructor = Number;  
alert('test'.constructor == String); //Result:false  
或者  
function MyClass() {  
}  
MyClass.prototype = {};  
alert((new MyClass).constructor == MyClass); //Result:false  
而且,通过constructor并不能判断出对象实例类型的继承关系。因为javascript的继承其实是通过原型链实现的(原型链是什么,看下文分解)。  
另外,null.constructor会抛出运行时的TypeError,所以使用constructor除了不靠谱外,还可能伴随着异常的风险。  
2.3 instanceof  
例子:a instanceof String  
关于object类型的判断,使用instanceof判断是比较靠谱的方法。instanceof所做的事情是,先取出类型对象(String)的prototype成员(String.prototype),然后和要判断类型的对象(a)的原型链中的对象逐个比较。当发现是一个对象的时候返回true,原型链中当前节点是null的时候返回false。  
类型判断示例:判断一个变量是否是字符串类型  
function isString(str) {  
  return (typeof str == 'string' || str instanceof String);  
}  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值