时间:13-10-10 栏目:Javascript 作者:zongyan86 评论:0 点击: 2,622 次
本文标签: javascript
转自: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()。
声明: 本文由( zongyan86 )原创编译,转载请保留链接: javascript中的类型检测