javascript中的类型检测

时间:13-10-10 栏目:Javascript 作者:zongyan86 评论:0 点击: 2,622 次

转自:http://www.cnblogs.com/zldream1106/p/3360414.html

类型检测
类型 检测方法 检测对象 检测结果 缺点 备注
原始值 typeof 字符串 string  
数字 number  
布尔值 boolean  
undefined undefined  
null object 引用类型的typeof结果为object,不能够起到检测的作用 检测null应用===或!==
引用值 instanceof 内置类型:Object,Date,Error,RegExp true instanceof会检测原型链,每个对象都继承自Object
自定义类型及内置类型中的function、Array true frame A、B中分别定义构造函数Person,且两个Person完全相同。A中创建实例传入B中,则有,
frameAPersonInstance instanceof frameAPerson //true
frameAPersonInstance instanceof frameBPerson //false
唯一的检测方法
typeof function function //IE8以上
object //IE8及以下
针对IE8及以下版本,由于其未将DOM实现为内置的javascript方法,需使用
if("xxx" in document)(){};来检测DOM的方法
 
Array.isArray() Array true ECMAScript5,适用于IE9+,FF4+,SF5+,O10.5+,Chrome  
Object.prototype.toString.call(value) === "[Object Array]" true 这种方法适用于所有内置对象,如JSON等
属性是否在对象中存在 “XXX”in object 属性 会深入检测实例及其继承的对象原型
hasOwnProperty() true //IE8以上
报错 //IE8及以下
针对IE8及以下版本,由于DOM对象并非继承自Object,因此不包含此方法。所以需要检测方法是否存在:
if(object.hasOwnProperty("related")){}; //针对非DOM对象
if("hasOwnProperty" in object && object.hasOwnProperty("related")){}; //不确定是否为DOM对象时
调用DOM对象的hasOwnProperty方法之前应先检测其是否存在!若已经知道对象不是DOM则可省略检测存在。

总的来说: 
typeof通常用于基本类型(null除外)及function的检测; 
instanceof通常用于自定义类型的检测; 
准确的类型检测使用Object.prototype.toString.call(value) === "[Object Array]"等; 
属性的检测使用in和hasOwnProperty()。 

web开发分享



声明: 本文由( zongyan86 )原创编译,转载请保留链接: javascript中的类型检测

关注我们