js如何判斷一個對象是不是Array赡茸?

當聽到這個問題的時候缎脾,肯定有人第一個想法就是用“typeof”來判斷,實則占卧,并不能實現(xiàn)遗菠;很憂傷联喘!
下面咱先來說一說“typeof”,在js中辙纬,對于Function豁遭, String, Number 牲平,Undefined 等幾種類型的對象來說堤框,他完全可以勝任?,大家都懂的纵柿!

1.typeof?

var arr=new Array("1","2","3","4","5");??
alert(typeof(arr));

你會收到一個object 蜈抓;什么破玩意;是不是這個時候想把鍵盤摔了昂儒,摔了沒關系沟使,再買吧!往下看:

2.instanceof

咱不能一條道走到黑渊跋,咱們得找其他的路子啊腊嗡,對不對?
JavaScript中instanceof運算符會返回一個 Boolean 類型的值拾酝,指出對象是否是特定類的一個實例燕少。
使用方法:result = object instanceof class,還是剛剛的數(shù)組,成功的返回 true蒿囤。?請看下面客们,看實際代碼:

var arrayStr=new Array("1","2","3","4","5");
alert(arrayStr instanceof Array);

啊,成功了材诽!高興吧底挫!這樣真的可以了嗎?是嗎脸侥?
其實?instanceof還是有一定的局限性的建邓,一想到這,不是驗證正確了嗎睁枕?沒毛病肮俦摺!
事實上在多個frame中穿梭就會產(chǎn)生大問題了?譬重?拒逮??

var iframe = document.createElement_x('iframe');   
document.body.appendChild(iframe);   
xArray = window.frames[window.frames.length-1].Array;      
var arr = new xArray("a","b","c","d","e");//這個寫法老古董IE下是不支持的臀规,F(xiàn)F下才有;
alert(arr instanceof Array); // false
alert(arr.constructor === Array); // false    

返回結果為兩個False滩援,讓人大失所望。為毛塔嬉?

3.?Object.prototype.toString( )

ECMA-262 寫道
Object.prototype.toString( ) When the toString method is called, the following steps are taken:
Get the [[Class]] property of this object.
Compute a string value by concatenating the three strings “[object “, Result (1), and “]”.
Return Result (2)
上面的規(guī)范定義了Object.prototype.toString的行為:首先玩徊,取得對象的一個內(nèi)部屬性[[Class]]租悄,然后依據(jù)這個屬性,返回一個類似于"[object Array]"的字符串作為結果(看過ECMA標準的應該都知道恩袱,[[]]用來表示語言內(nèi)部用到的泣棋、外部不可直接訪問的屬性,稱為“內(nèi)部屬性”)畔塔。利用這個方法潭辈,再配合call,我們可以取得任何對象的內(nèi)部屬性[[Class]]澈吨,然后把類型檢測轉化為字符串比較脚作,以達到我們的目的洲押。還是先來看看在ECMA標準中Array的描述吧蒸眠。

new Array([ item0[, item1 [,…]]])
The [[Class]] property of the newly constructed object is set to “Array”.

于是利用這點前翎,第三種方法登場了。
call改變toString的this引用為待檢測的對象桑阶,返回此對象的字符串表示柏副,然后對比此字符串是否是'[object Array]',以判斷其是否是Array的實例蚣录。也許你要問了割择,為什么不直接o.toString()?嗯萎河,雖然Array繼承自Object锨推,也會有toString方法,但是這個方法有可能會被改寫而達不到我們的要求公壤,而Object.prototype則是老虎的屁股,很少有人敢去碰它的椎椰,所以能一定程度保證其“純潔性”:)

與前面幾個方案不同厦幅,這個方法很好的解決了跨frame對象構建的問題,經(jīng)過測試慨飘,各大瀏覽器兼容性也很好确憨,可以放心使用。一個好消息是瓤的,很多框架休弃,比如jQuery、Base2等等圈膏,都計劃借鑒此方法以實現(xiàn)某些特殊的塔猾,比如數(shù)組、正則表達式等對象的類型判定稽坤,不用我們自己寫了丈甸。
另外Ext3 也已經(jīng)換成這樣的寫法了;

isArray : function (v){         
return toString.apply(v) === '[object Array]';}

4.JQ中$isArray();

話不多說糯俗,直接上代碼吧!

$(document).ready(function(){
        var Arr = ["4","8","1","3"];
        alert($.isArray(Arr));?
})?

返回的值為?Boolean 類型的值睦擂,是數(shù)組則返回一個“true”得湘,反之“false”
成了!?
行就到這吧顿仇!希望大家多多支持淘正!

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市臼闻,隨后出現(xiàn)的幾起案子鸿吆,更是在濱河造成了極大的恐慌,老刑警劉巖些阅,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件伞剑,死亡現(xiàn)場離奇詭異,居然都是意外死亡市埋,警方通過查閱死者的電腦和手機黎泣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來缤谎,“玉大人抒倚,你說我怎么就攤上這事】涝瑁” “怎么了托呕?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長频敛。 經(jīng)常有香客問我项郊,道長,這世上最難降的妖魔是什么斟赚? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任着降,我火速辦了婚禮,結果婚禮上拗军,老公的妹妹穿的比我還像新娘任洞。我一直安慰自己,他們只是感情好发侵,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布交掏。 她就那樣靜靜地躺著,像睡著了一般刃鳄。 火紅的嫁衣襯著肌膚如雪盅弛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機與錄音熊尉,去河邊找鬼罐柳。 笑死,一個胖子當著我的面吹牛狰住,可吹牛的內(nèi)容都是我干的张吉。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼催植,長吁一口氣:“原來是場噩夢啊……” “哼肮蛹!你這毒婦竟也來了?” 一聲冷哼從身側響起创南,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤伦忠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后稿辙,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體昆码,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年邻储,在試婚紗的時候發(fā)現(xiàn)自己被綠了赋咽。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡吨娜,死狀恐怖脓匿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情宦赠,我是刑警寧澤陪毡,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站勾扭,受9級特大地震影響毡琉,放射性物質發(fā)生泄漏。R本人自食惡果不足惜妙色,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一绊起、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧燎斩,春花似錦、人聲如沸蜂绎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽师枣。三九已至怪瓶,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間践美,已是汗流浹背洗贰。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工找岖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人敛滋。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓许布,卻偏偏與公主長得像,于是被迫代替她去往敵國和親绎晃。 傳聞我的和親對象是個殘疾皇子蜜唾,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容

  • 題目:如何判斷一個js對象是否是Array,arr為要判斷的對象,其中最準確的方法是庶艾?A. typeof(arr)...
    梁海杰_IRV閱讀 502評論 0 2
  • 前言 js 中的類型檢測也是很重要的一部分袁余,所以說這篇文章我們就來講一下怎么對 JavaScript 中的基本數(shù)據(jù)...
    sunshine小小倩閱讀 465評論 1 3
  • ECMAScript關鍵字 delete do else finally function in instance...
    doudou2閱讀 714評論 0 0
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學一百閱讀 3,212評論 0 4
  • “真正的作者得縮在床上,蹲在地溝咱揍,在所有破碎的地方颖榜。” 破碎之處煤裙,方有破碎之心掩完。真理從來不會以修飾的形式存在,城市...
    一點影評閱讀 136評論 0 0