|
Js代碼
復制代碼 代碼如下:
alert(typeof null); // "object"
alert(typeof []); // "object"
2、instanceof操作符。此操作符檢測對象的原型鏈是否指向構造函數(shù)的prototype對象,恩,聽起來不錯,應該可以解決我們的數(shù)組檢測問題:
Js代碼
復制代碼 代碼如下:
var arr = [];
alert(arr instanceof Array); // true
3、對象的constructor屬性。除了instanceof,我們還可以利用每個對象都具有constructor的屬性來判斷其類型,于是乎我們可以這樣做:
Js代碼
復制代碼 代碼如下:
var arr = [];
alert(arr.constructor == Array); // true
貌似后兩個解決方案是無懈可擊的,但真的是這樣么?天有不測風云,當你在多個frame中來回穿梭的時候,令人沮喪的問題出現(xiàn)了:
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都有一套自己的執(zhí)行環(huán)境,跨frame實例化的對象彼此是不共享原型鏈的,因此導致上述檢測代碼失效!怎么辦怎么辦??嗯,Javascript是動態(tài)語言,或許萬金油“鴨式辨型”(duck type)可以助我們一臂之力“如果它走起路來像鴨子,叫起來也像鴨子,那就當他是鴨子吧”,同理,可以檢測某些數(shù)組對象特有的能力來做判斷,這個法子已經(jīng)有人用了,比如Prototype框架,來看看它實現(xiàn)的Object.isArray方法:
Js代碼
復制代碼 代碼如下:
isArray: function(object) {
return object != null && typeof object == "object" &&
'splice' in object && 'join' in object;
}
isArray:”object,你有splice、join這兩個數(shù)組特有的方法嗎?”
object:“嗯,沒錯我有!”
isArray:“好吧,那你就是個數(shù)組了,哪怕你是冒充的, 主站蜘蛛池模板: 91视频免费观看 | 欧美日韩一二三区 | 久久久www成人免费无遮挡大片 | 免费观看的av毛片的网站 | 一区二区三区av | 麻豆av网| 精品成人在线观看 | 国产精品一区二区电影 | 亚洲高清在线 | 亚洲一区二区三区免费在线观看 | 国产精品永久久久久久久www | 日韩在线免费播放 | 三级成人在线 | 国产91亚洲精品一区二区三区 | 日韩精品一区二区三区中文在线 | 羞羞的视频在线观看 | 精品免费国产视频 | 午夜影院 | 日本精品免费 | 色天堂视频 | 欧美精品第一区 | 亚洲电影一区二区三区 | 97影院2| 日韩羞羞| 日韩欧美二区 | 日本精品久久久一区二区三区 | 国产高清无av久久 | 日韩成人一区 | 激情av在线| 久久逼逼 | 日韩精品一区二区三区在线 | 国产精品综合一区二区 | 九九热这里只有精品在线观看 | 国产精品久久网 | 91视频在线观看 | 在线看91| 欧美11一13sex性hd | 一区二区免费在线 | 国产伦精品一区二区三区四区视频 | 一区二区三区国产 | 麻豆一区二区三区 |