国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

Javascript isArray 數(shù)組類型檢測函數(shù)

2024-05-06 14:13:35
字體:
供稿:網(wǎng)友
1、typeof操作符。對于Function、String、Number、Undefined這幾種類型的對象來說,不會有什么問題,但是針對Array的對象就沒什么用途了:
Js代碼
代碼如下:
alert(typeof null); // "object"
alert(typeof []); // "object"

2、instanceof操作符。此操作符檢測對象的原型鏈?zhǔn)欠裰赶驑?gòu)造函數(shù)的prototype對象,恩,聽起來不錯(cuò),應(yīng)該可以解決我們的數(shù)組檢測問題:
Js代碼
代碼如下:
var arr = [];
alert(arr instanceof Array); // true

3、對象的constructor屬性。除了instanceof,我們還可以利用每個(gè)對象都具有constructor的屬性來判斷其類型,于是乎我們可以這樣做:
Js代碼
代碼如下:
var arr = [];
alert(arr.constructor == Array); // true

貌似后兩個(gè)解決方案是無懈可擊的,但真的是這樣么?天有不測風(fēng)云,當(dāng)你在多個(gè)frame中來回穿梭的時(shí)候,令人沮喪的問題出現(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

由于每個(gè)iframe都有一套自己的執(zhí)行環(huán)境,跨frame實(shí)例化的對象彼此是不共享原型鏈的,因此導(dǎo)致上述檢測代碼失效!怎么辦怎么辦??嗯,javascript是動態(tài)語言,或許萬金油“鴨式辨型”(duck type)可以助我們一臂之力“如果它走起路來像鴨子,叫起來也像鴨子,那就當(dāng)他是鴨子吧”,同理,可以檢測某些數(shù)組對象特有的能力來做判斷,這個(gè)法子已經(jīng)有人用了,比如Prototype框架,來看看它實(shí)現(xiàn)的Object.isArray方法:
Js代碼
代碼如下:
isArray: function(object) {
return object != null && typeof object == "object" &&
'splice' in object && 'join' in object;
}

isArray:”object,你有splice、join這兩個(gè)數(shù)組特有的方法嗎?”
object:“嗯,沒錯(cuò)我有!”
isArray:“好吧,那你就是個(gè)數(shù)組了,哪怕你是冒充的,囧……”
Js代碼
代碼如下:
var trickster = { splice: 1, join: 2 };
Object.isArray(trickster); // 假冒成功,耶

沒錯(cuò),這個(gè)解決方案給人的感覺有點(diǎn)別扭,任何一個(gè)具有'splice'和'join'屬性的對象都能通過這個(gè)檢測!怎么辦怎么辦怎么辦??別著急,仔細(xì)想想,其實(shí)我們需要的是一個(gè)能取得對象實(shí)際類型,而且又能跨frame使用的方法即可。這不,細(xì)心的老外在翻閱ECMA262標(biāo)準(zhǔn)的時(shí)候發(fā)現(xiàn)了這個(gè)(btw,我也看了,怎么就沒發(fā)現(xiàn)這個(gè)用途呢,囧):
ECMA-262 寫道
代碼如下:
Object.prototype.toString( ) When the toString method is called, the following steps are taken:
1. Get the [[Class]] property of this object.
2. Compute a string value by concatenating the three strings “[object “, Result (1), and “]”.
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 滕州市| 陈巴尔虎旗| 金川县| 井冈山市| 淮南市| 韩城市| 湘西| 泾源县| 榆中县| 福贡县| 甘孜县| 富裕县| 故城县| 娄底市| 镇宁| 湘潭县| 勃利县| 安多县| 呼伦贝尔市| 彭州市| 武平县| 渭源县| 抚顺县| 普陀区| 德安县| 安宁市| 册亨县| 陕西省| 赫章县| 营山县| 佛山市| 治县。| 巴彦淖尔市| 东源县| 潮安县| 叶城县| 尉氏县| 察雅县| 富民县| 聂拉木县| 上犹县|