|
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:“好吧,那你就是個數組了,哪怕你是冒充的, 主站蜘蛛池模板: 边做边爱免费视频 | 伊人亚洲AV久久无码精品 | 丰满少妇69激情啪啪无码 | 又亲又揉摸下面视频免费看 | 亚洲中文热码在线视频 | 青青草原伊人网 | 久久4k岛国高清一区二区 | 丰满女友bd高清在线观看 | 扒开双腿疯进出爽爽爽动态图 | 久久精品国产色蜜蜜麻豆国语版 | 亚洲色婷婷久久精品AV蜜桃 | 亚洲免费一 | 九九热在线视频精品店 | 国产一卡在线观看完整版 | 日本xxxxxxx| 夜夜澡人人爽人人喊_欧美 夜夜骑夜夜欢 | 97成人精品视频在线播放 | qvod电影| 精品99久久久久成人网站 | 999www成人免费视频 | 欧美gv明星 | 偷拍久久国产视频免费 | 国产成人综合网在线观看 | 顶级少妇AAAAABBBBB片 | 四虎国产精品永久一区高清 | 亚洲日本欧美产综合在线 | 青青精品视频国产 | 涩涩在线视频 | 领导边摸边吃奶边做爽在线观看 | 国产午夜精品久久久久九九 | 色色噜一噜 | 久久夜色噜噜噜亚洲AV0000 | 亚洲人视频在线观看 | 亚洲视频网站欧美视频网站 | 久久久久综合 | 亚洲 日本 欧美 中文字幕 | 久久免费高清 | 精品午夜中文字幕熟女人妻在线 | 尤蜜网站在线进入免费 | 99re久久热免费视频 | 色色激情网 |