|
Js代碼
復制代碼 代碼如下:
alert(typeof null); // "object"
alert(typeof []); // "object"
2、instanceof操作符。此操作符檢測對象的原型鏈是否指向構造函數的prototype對象,恩,聽起來不錯,應該可以解決我們的數組檢測問題:
Js代碼
復制代碼 代碼如下:
var arr = [];
alert(arr instanceof Array); // true
3、對象的constructor屬性。除了instanceof,我們還可以利用每個對象都具有constructor的屬性來判斷其類型,于是乎我們可以這樣做:
Js代碼
復制代碼 代碼如下:
var arr = [];
alert(arr.constructor == Array); // true
貌似后兩個解決方案是無懈可擊的,但真的是這樣么?天有不測風云,當你在多個frame中來回穿梭的時候,令人沮喪的問題出現了:
Js代碼
復制代碼 代碼如下:
var iframe = document.createElement('iframe');
document.body.appendChild(iframe);
xArray = window.frames[window.frames.length-1].Array;
var arr = new xArray(1,2,3); // [1,2,3]
// 哎呀!
arr instanceof Array; // false
// 哎呀呀!
arr.constructor === Array; // false
由于每個iframe都有一套自己的執行環境,跨frame實例化的對象彼此是不共享原型鏈的,因此導致上述檢測代碼失效!怎么辦怎么辦??嗯,Javascript是動態語言,或許萬金油“鴨式辨型”(duck type)可以助我們一臂之力“如果它走起路來像鴨子,叫起來也像鴨子,那就當他是鴨子吧”,同理,可以檢測某些數組對象特有的能力來做判斷,這個法子已經有人用了,比如Prototype框架,來看看它實現的Object.isArray方法:
Js代碼
復制代碼 代碼如下:
isArray: function(object) {
return object != null && typeof object == "object" &&
'splice' in object && 'join' in object;
}
isArray:”object,你有splice、join這兩個數組特有的方法嗎?”
object:“嗯,沒錯我有!”
isArray:“好吧,那你就是個數組了,哪怕你是冒充的, 主站蜘蛛池模板: 国产精品自在在线午夜精品 | 国产午夜伦伦伦午夜伦 | 国产69精品9999XXXX | 在线亚洲视频无码天堂 | 日日噜噜夜夜躁躁狠狠 | 国产亚洲精品免费视频 | 啊灬啊别停灬用力啊在线观看视频 | 久久亚洲AV成人无码国产漫画 | 国产AV国产精品国产三级在线L | 日本人作爰啪啪全过程 | 姐姐不~不可以动漫在线观看 | 美女靠逼漫画 | 精品无码日本蜜桃麻豆 | WWW国产色情在线观看APP | 性欧美video| 亚洲午夜精品A片久久WWW软件 | 扒开老师粉嫩的泬10P | 亚洲午夜无码久久久久蜜臀av | 99久久伊人一区二区yy5099 | 狠狠色狠狠色综合日日32 | 亚洲AV永久无码精品澳门 | 小箩莉奶水四溅小说 | 亚洲免费在线观看 | 成人特级毛片 | 久久不卡免费视频 | 亚洲 日本 天堂 国产 在线 | 国产成人精品永久免费视频 | 国产精品嫩草影院一区二区三区 | 在线精品视频免费观看 | 草莓视频免费在线观看 | 成人高清护士在线播放 | MD传媒MD0021在线观看 | 99热成人精品国产免男男 | 九九色精品国偷自产视频 | 日韩欧美一区二区三区在线 | 亚洲精品黄色 | 97久久国产露脸精品国产 | 色柚视频网站ww色 | 英国video性精品高清最新 | 精品国产中文字幕在线视频 | 朝鲜黄色录像 |