类型检测 |
类型 |
检测方法 |
检测对象 |
检测结果 |
缺点 |
备注 |
原始值 |
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则可省略检测存在。 |