成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

javascript 判斷是否為數(shù)組 isArray()

liaoyg8023 / 1345人閱讀

摘要:開(kāi)發(fā)人員自定義的任何構(gòu)造函數(shù)都將返回。在任何值上直接調(diào)用的原生方法,都會(huì)返回格式的字符串,每個(gè)類內(nèi)部都有一個(gè)屬性,這個(gè)屬性中就指定了上述字符串中構(gòu)造函數(shù)名。

JavaScript 在類型判斷上確實(shí)是有比較多的坑,在不使用 ES5 的 Array.isArray() 的情況下,如何判斷呢?

首先放棄typeof

javascript 弱類型的語(yǔ)言就是有比較多的坑,單純的typeof 是很無(wú)力的。所以用它來(lái)判斷數(shù)組肯定是不行的。

    typeof 1    // number
    typeof undefined  // undefined
    typeof null // object
    typeof []   // object
    typeof {}   //object
    typeof function (){} // function

那么言歸正傳正傳,該如何判斷。

思路一:length 屬性判斷

Array 對(duì)象都是有l(wèi)ength 屬性的,可不可以判斷l(xiāng)ength

  function isArray(array) {
      return (typeof array === "object" && typeof array.length === "number")
  }

與這個(gè)類似的是

  function isArray(array) {
      return (typeof array === "object" && !isNaN(array.length))
  }

但是這個(gè)存在的問(wèn)題是,對(duì)于有l(wèi)ength屬性的對(duì)象,則會(huì)出現(xiàn)判斷失誤的問(wèn)題
比如:

    var fakeArray = {
        length: 10,
        value: "Fake Array"
    }
    
思路二:對(duì)Array實(shí)例對(duì)象的原型進(jìn)行判斷。
    var arr = [1, 2, 3]
    arr instanceof Array
    
    // constructor 指向了原型
    arr.constructor === Array
    

但在多iframe的情況下,由于每個(gè)iframe 是一個(gè)獨(dú)立的環(huán)境,它們之間不不共享原型鏈,則通過(guò)原型進(jìn)行判斷會(huì)出現(xiàn)錯(cuò)誤

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]

// 正確的判斷
Array.isArray(arr)  // true
// 有問(wèn)題的判斷
arr instanceof Array // false
arr.constructor === Array // false 
思路三: Object.prototype.toString.call() 方法

適用于所有環(huán)境,只支持原生的對(duì)象,Object的toString()方法不能檢測(cè)非原生構(gòu)造函數(shù)的構(gòu)造函數(shù)名。開(kāi)發(fā)人員自定義的任何構(gòu)造函數(shù)都將返回[object Object]。在任何值上直接調(diào)用Object的原生toString()方法,都會(huì)返回[object NativeConstrctorName]格式的字符串,每個(gè)類內(nèi)部都有一個(gè)class屬性,這個(gè)屬性中就指定了上述字符串中構(gòu)造函數(shù)名。
 

    Object.prototype.toString.call(array) === "[object Array]"

不過(guò),上面的方案也存在一定問(wèn)題,在ES6 中這樣的判斷可以被欺騙

    var obj = {};
    // ES6 Symbol
    obj[Symbol.toStringTag] = "Array";
    // true
    console.log(isArray(obj)); 
結(jié)論

在ES5 之后,就老老實(shí)實(shí)用Array.isArray 來(lái)判斷,ES5之前可以使用上面pollyfill。

    if (!Array.isArray) {
        return Object.prototype.toString.call(array) === "[object Array]";
    }
結(jié)論延伸

以此延伸,那么判斷其他類型就可以使用類似的方法

    var is = function (obj,type) { 
        return (type === "Null" && obj === null) || 
            (type === "Undefined" && obj === void 0 ) || 
            (type === "Number" && isFinite(obj)) || 
            Object.prototype.toString.call(obj).slice(8,-1) === type; 
    }

參考:

1.Javascript isArray 數(shù)組類型檢測(cè)函數(shù)

2.JavaScript數(shù)組的isArray方法實(shí)現(xiàn)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/107885.html

相關(guān)文章

  • JavaScript中,如何判斷數(shù)組數(shù)組?

    摘要:比如我們今天要討論的,在當(dāng)中如何判斷一個(gè)數(shù)組是數(shù)組。在數(shù)組的原型鏈上也能找到構(gòu)造函數(shù)由上面的幾行代碼可以看出,使用運(yùn)算符可以分辨數(shù)組和對(duì)象,可以判斷數(shù)組是數(shù)組。用判斷實(shí)例化的數(shù)組擁有一個(gè)屬性,這個(gè)屬性指向生成這個(gè)數(shù)組的方法。 如果你沒(méi)有注意過(guò)這個(gè)問(wèn)題,那么這個(gè)標(biāo)題應(yīng)該會(huì)讓你感到困惑,判斷數(shù)據(jù)類型這么基礎(chǔ)的問(wèn)題能有什么坑呢? 少年,你不能太天真了,我們朝夕面對(duì)的這門語(yǔ)言,可是JavaSc...

    kohoh_ 評(píng)論0 收藏0
  • javascript判斷一個(gè)對(duì)象是否數(shù)組

    摘要:多個(gè)窗口意味著多個(gè)全局環(huán)境,不同的全局環(huán)境擁有不同的全局對(duì)象,從而擁有不同的內(nèi)置類型構(gòu)造函數(shù)。這可能會(huì)引發(fā)一些問(wèn)題。上面我們提到使用原生的方法來(lái)判斷值是否為數(shù)組的實(shí)例。這也意味著不是一個(gè)十分可靠的識(shí)別對(duì)象類型的方式。 在JavaScript中,可以通過(guò)typeof操作符來(lái)判斷基本數(shù)據(jù)類型(Undefined、Null、Boolean、Number和String),同時(shí)相信大家也熟知ty...

    BearyChat 評(píng)論0 收藏0
  • javascript 判斷變量是否數(shù)組(Array)

    摘要:過(guò)完春節(jié)又有好多人尋找新的機(jī)會(huì),旁邊的人面試完就會(huì)分享一些問(wèn)題,明明會(huì)的但是面試的時(shí)候,想不全,面試官不滿意這個(gè)懊惱的行為,今天的文章跟大家分享下如何判斷便是是數(shù)組。 過(guò)完春節(jié)又有好多人尋找新的機(jī)會(huì),旁邊的人面試完就會(huì)分享一些問(wèn)題,明明會(huì)的但是面試的時(shí)候,想不全,面試官不滿意...這個(gè)懊惱的行為,今天的文章跟大家分享下:javascript如何判斷便是是數(shù)組。 1. typeof真的那...

    lyning 評(píng)論0 收藏0
  • javascript 判斷變量是否數(shù)組(Array)

    摘要:過(guò)完春節(jié)又有好多人尋找新的機(jī)會(huì),旁邊的人面試完就會(huì)分享一些問(wèn)題,明明會(huì)的但是面試的時(shí)候,想不全,面試官不滿意這個(gè)懊惱的行為,今天的文章跟大家分享下如何判斷便是是數(shù)組。 過(guò)完春節(jié)又有好多人尋找新的機(jī)會(huì),旁邊的人面試完就會(huì)分享一些問(wèn)題,明明會(huì)的但是面試的時(shí)候,想不全,面試官不滿意...這個(gè)懊惱的行為,今天的文章跟大家分享下:javascript如何判斷便是是數(shù)組。 1. typeof真的那...

    RayKr 評(píng)論0 收藏0
  • javascript 判斷變量是否數(shù)組(Array)

    摘要:過(guò)完春節(jié)又有好多人尋找新的機(jī)會(huì),旁邊的人面試完就會(huì)分享一些問(wèn)題,明明會(huì)的但是面試的時(shí)候,想不全,面試官不滿意這個(gè)懊惱的行為,今天的文章跟大家分享下如何判斷便是是數(shù)組。 過(guò)完春節(jié)又有好多人尋找新的機(jī)會(huì),旁邊的人面試完就會(huì)分享一些問(wèn)題,明明會(huì)的但是面試的時(shí)候,想不全,面試官不滿意...這個(gè)懊惱的行為,今天的文章跟大家分享下:javascript如何判斷便是是數(shù)組。 1. typeof真的那...

    RichardXG 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<