|
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:“好吧,那你就是個數組了,哪怕你是冒充的, 主站蜘蛛池模板: 晚夜免费禁用十大亏亏 | 艳鉧动漫片1~6全集在线 | 99国产精品综合AV无码 | 久久久国产精品免费A片蜜臀 | 草莓视频在线观看免费观看高清 | 同桌上课把奶露出来给我玩 | 2019精品国产品在线不卡 | 色琪琪无码成人AV视频 | 人人看人人看 | 秋霞网在线伦理影片 | 色偷偷成人网免费视频男人的天堂 | 99爱视频在线观看 | 小寡妇好紧进去了好大看视频 | AV多人爱爱XXx | 久久精品一卡二卡三卡四卡视频版 | bbwvideoa欧美老妇 | 中文国产乱码在线人妻一区二区 | 日韩亚洲人成在线 | 精品欧美小视频在线观看 | 久久麻豆亚洲AV成人无码国产 | 久久笫一福利免费导航 | 偷拍自怕亚洲在线第7页 | 老师的玉足高跟鞋满足我 | 胖老太与人牲交BBWBBW高潮 | 大学生宿舍飞机china free | 99国产强伦姧在线看RAPE | 中文字幕无线观看不卡网站 | 40岁东北老阿姨无码 | 动漫人物差差差30分钟免费看 | 亚洲成年人在线观看 | 中文字幕在线不卡精品视频99 | 美女张开腿让男生桶动态图 | 亚洲精品色播一区二区 | 国产99久久久欧美黑人刘玥 | 日本精品卡一卡2卡3卡四卡三卡 | 国产精品亚洲精品久久品 | 超嫩校花被灌醉在线观看 | 富婆找黑人老外泻火在线播放 | 男人有噶坏 | 好色女博士 | 第七色 夜夜撸 |