javascript怎么判斷一個(gè)變量是數(shù)組

之前strong去見(jiàn)了大神回來(lái)問(wèn)我,怎么判斷一個(gè)變量是數(shù)組,至少要用三種方法。

參見(jiàn)一篇來(lái)自前端大全的文章
參考鏈接在這里

isArray()

照理說(shuō)這個(gè)方法是最簡(jiǎn)便的方法。

if(Array.isArray(value)){}

但是這個(gè)方法在IE9以下的瀏覽器并不支持

typeof()

數(shù)組是特殊的對(duì)象,所以數(shù)組的typeof結(jié)果是object。然而,null的typeof結(jié)果也是object。所以要用typeof的話就得寫(xiě)成

var a = [1,2,3];
//是object且要排除null和純對(duì)象
console.log(
(typeof a === 'object' && a !== null &&               Object.prototype.toString.call(a) !== '[object Object]')); //true

instanceof()

對(duì)于一個(gè)網(wǎng)頁(yè)或者一個(gè)全局作用域而言。這個(gè)方法是有效的

if(a instanceof Array){//...}

但是如果這個(gè)頁(yè)面嵌套了frame暫且叫做a.html。
這個(gè)frame里定義了window.a= [1,3,5];

那么

window.onload = function(){
    var a = window.frames[0].a;
    console.log(a instanceof Array); //false
    console.log(a.constructor === Array); //false
}

這是因?yàn)槊總€(gè) frame 都有一套自己的執(zhí)行環(huán)境,跨 frame 實(shí)例化的對(duì)象彼此不共享原型鏈。如果打印 a instanceof window.frames[0].Array,那么結(jié)果就是 true 了。

特性嗅探

var b = [3,4,5];
if(b.sort){//.....}

這樣一旦某個(gè)對(duì)象正好有值為sort的key的話,就會(huì)有問(wèn)題。
比如:

var b = {sort:'aaa'};

這樣的話b.sort也是true,所以也不能用。

最靠譜的方法應(yīng)該是

Object.prototype.toString.call(value)

這個(gè)方法的原理是:
每個(gè)對(duì)象有一個(gè)叫做class的內(nèi)部屬性,再配合 call,我們可以取得任何對(duì)象的內(nèi)部屬性 [[Class]],然后把類(lèi)型檢測(cè)轉(zhuǎn)化為字符串輸出。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第5章 引用類(lèi)型(返回首頁(yè)) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類(lèi)型 使用基本類(lèi)型...
    大學(xué)一百閱讀 3,665評(píng)論 0 4
  • Javascript有很多數(shù)組的方法,有的人有W3C的API,還可以去MDN上去找,但是我覺(jué)得API上說(shuō)的不全,M...
    頑皮的雪狐七七閱讀 4,471評(píng)論 0 6
  • 第三章 基本概念 3.1 語(yǔ)法 ECMAScript標(biāo)識(shí)符一般采用駝峰大小寫(xiě)格式,也就是第一個(gè)字母小寫(xiě),剩下的每個(gè)...
    小雄子閱讀 655評(píng)論 0 1
  • 不要輕易放棄一個(gè)每天都會(huì)想念的人。這樣的人,一輩子也不會(huì)遇到幾個(gè)。即便在一起要吃很多苦頭,咬咬牙也就過(guò)去了。生活的...
    綰心閱讀 1,306評(píng)論 7 7
  • 問(wèn)答 1.ajax 是什么?有什么作用? AJAX = Asynchronous JavaScript and X...
    鴻鵠飛天閱讀 276評(píng)論 0 0

友情鏈接更多精彩內(nèi)容