|
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:“好吧,那你就是個數組了,哪怕你是冒充的, 主站蜘蛛池模板: 王源个人资料简介身高| 繁花免费版在线观看全集国语| 赛虎| 扒开双腿猛进入小柔的扮演者| 定型枕什么时候能给宝宝用 | 日本电影小小的家| 色在线视频| 姨妈来之前的征兆有哪些| 出彩中国人第三季 综艺| 邻家花美男 电视剧| 第一财经在线直播电视| 勇敢者| 部队换季保养广播稿| 色女孩视频| 张东生| 禁忌爱| 成年奶妈| 黄视频免费观看网站| 警犬图片| 麻友| 蛇蝎美人第四季| 日韩在线日韩| 杨超越个人资料| 都市频道在线直播观看| 新上海滩张国荣和宁静| 林诗雅全部三级在线| 韩剧《神奇的娃娃》免费观看| 尹雪喜电影| 雅马哈调音台说明书| 3d性欧美动漫精品xxx游戏| rima horton| 变形金刚7免费高清电影| 浙江卫视节目在线观看直播| 飞艇全天精准计划软件| nina hartley| xiuren秀人网最新地址| 掐脖子自制短视频| 电影九龙城寨| 热带夜的引诱| 混凝土结构施工质量验收规范gb50204-2015| jagger|