| 類型檢測(cè) |
| 類型 |
檢測(cè)方法 |
檢測(cè)對(duì)象 |
檢測(cè)結(jié)果 |
缺點(diǎn) |
備注 |
| 原始值 |
typeof |
字符串 |
string |
|
|
| 數(shù)字 |
number |
|
|
| 布爾值 |
boolean |
|
|
| undefined |
undefined |
|
|
| null |
object |
引用類型的typeof結(jié)果為object,不能夠起到檢測(cè)的作用 |
檢測(cè)null應(yīng)用===或!== |
| 引用值 |
instanceof |
內(nèi)置類型:Object,Date,Error,RegExp |
true |
|
instanceof會(huì)檢測(cè)原型鏈,每個(gè)對(duì)象都繼承自O(shè)bject |
| 自定義類型及內(nèi)置類型中的function、Array |
true |
frame A、B中分別定義構(gòu)造函數(shù)Person,且兩個(gè)Person完全相同。A中創(chuàng)建實(shí)例傳入B中,則有,
frameAPersonInstance instanceof frameAPerson //true
frameAPersonInstance instanceof frameBPerson //false |
唯一的檢測(cè)方法 |
| typeof |
function |
function
//IE8以上
object //IE8及以下 |
針對(duì)IE8及以下版本,由于其未將DOM實(shí)現(xiàn)為內(nèi)置的javascript方法,需使用
if("xxx" in document)(){};來(lái)檢測(cè)DOM的方法 |
|
| Array.isArray() |
Array |
true |
ECMAScript5,適用于IE9+,FF4+,SF5+,O10.5+,Chrome |
|
| Object.prototype.toString.call(value) ===
"[Object Array]" |
true |
|
這種方法適用于所有內(nèi)置對(duì)象,如JSON等 |
| 屬性是否在對(duì)象中存在 |
“XXX”in object |
屬性 |
|
|
會(huì)深入檢測(cè)實(shí)例及其繼承的對(duì)象原型 |
| hasOwnProperty() |
true
//IE8以上
報(bào)錯(cuò) //IE8及以下 |
針對(duì)IE8及以下版本,由于DOM對(duì)象并非繼承自O(shè)bject,因此不包含此方法。所以需要檢測(cè)方法是否存在:
if(object.hasOwnProperty("related")){}; //針對(duì)非DOM對(duì)象
if("hasOwnProperty" in object &&
object.hasOwnProperty("related")){}; //不確定是否為DOM對(duì)象時(shí) |
調(diào)用DOM對(duì)象的hasOwnProperty方法之前應(yīng)先檢測(cè)其是否存在!若已經(jīng)知道對(duì)象不是DOM則可省略檢測(cè)存在。 |