国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

[學習筆記] JavaScript 檢測數(shù)組

ZweiZhao / 1549人閱讀

摘要:從而將傳入的數(shù)組誤判為非數(shù)組。每個類在內(nèi)部都有一個屬性,這個屬性就指定了上述字符串中的構(gòu)造函數(shù)名。的方法不能檢測非原生的構(gòu)造函數(shù)的構(gòu)造函數(shù)名,因此,開發(fā)人員定義的任何構(gòu)造函數(shù)都將返回。

JS的經(jīng)典問題之一就是“檢測一個對象是不是數(shù)組”,本文總結(jié)了3種檢測方法。

instanceof檢測方法
var arr = [];
if (arr instanceof Array) {
    // do something
}

存在問題
instanceof 操作符假設(shè)只有一個全局執(zhí)行環(huán)境。如果網(wǎng)頁中包含多個框架,那實際上存在兩個以上的不同全局執(zhí)行環(huán)境,從而存在兩個以上不同版本的Array構(gòu)造函數(shù)。如果從一個框架向另一個框架傳入數(shù)組,那么傳入的數(shù)組與第二框架中原生的數(shù)組分別具有各自不同的構(gòu)造函數(shù)。從而將傳入的數(shù)組誤判為非數(shù)組。

如果只有一個全局執(zhí)行環(huán)境,可以用 instanceof 檢測數(shù)組。

Array.isArray()方法
var arr = [];
if (Array.isArray(arr)) {
    // do something
}

這個方法克服了instanceof的問題,可以確定某個變量是不是數(shù)組,而不管它是在哪個全局執(zhí)行環(huán)境中創(chuàng)建的。
但是支持Array.isArray()方法的瀏覽器有IE9+、Firefox4+、Safari5+、Opera10.5+和Chrome。對于不支持這個方法的瀏覽器怎么辦呢?第三種——萬能方法。

萬能方法
function isArray(arr) {
    return Object.prototype.toString.call(arr) == "[object Array]";
}

var arr = [];
isArray(arr);

原理
在任何值上調(diào)用Object原生的toString() 方法,都會返回一個[object NativeConstructorName] 格式的字符串。每個類在內(nèi)部都有一個[ [Class] ]屬性,這個屬性就指定了上述字符串中的構(gòu)造函數(shù)名NativeConstructorName。如:

var arr = [];
console.log(Object.pototype.toString.call(arr)); // "[object Array]"

這種思路也可用于檢測某個值是不是原生函數(shù)或正則表達式。

// Array
Object.prototype.toString.call(value); // "[object Array]"

// Function
Object.prototype.toString.call(value); // "[object Function]"

// RegExp
Object.prototype.toString.call(value); // "[object RegExp]"

// Date
Object.prototype.toString.call(value); // "[object Date]"
  

Object的toString()方法不能檢測非原生的構(gòu)造函數(shù)的構(gòu)造函數(shù)名,因此,開發(fā)人員定義的任何構(gòu)造函數(shù)都將返回[object Object]。

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

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/85777.html

相關(guān)文章

  • JavaScript框架學習筆記(一)

    摘要:基本的學習思路是跟著框架設(shè)計這本書,甚至可以說是這本書的讀書筆記。也參考很多網(wǎng)上解讀的博客和學習資料。當然,最重要的資料還是框架的源代碼。后來由于開發(fā)者反對,新興的框架都在命名空間上構(gòu)建。 JavaScript框架學習筆記(一) 我為什么要學習框架 更深入的理解工具,以后用起來更順手而且也能做一定的工具取舍,學習理解新工具也就更快, 對提升js水平也很有幫助,框架有很多解決坑的經(jīng)典思...

    Shonim 評論0 收藏0
  • es5學習筆記——拜讀JavaScript高級程序設(shè)計(持續(xù)更新)

    摘要:當以非構(gòu)造函數(shù)形式被調(diào)用時,等同于。并且,函數(shù)執(zhí)行完畢后,其活動對象不會被銷毀,因為匿名函數(shù)的作用域鏈仍然在引用這個活動對象。知道閉包被銷毀,創(chuàng)建函數(shù)的活動對象才會被回收。 本著盡可能多的完善基礎(chǔ)知識,打好基礎(chǔ),做一條有夢想的咸魚。 1.數(shù)據(jù)類型 基本數(shù)據(jù)類型:Undefined,Null,Boolean,Number,String,一種復雜數(shù)據(jù)類型Object 2.typeof操...

    reclay 評論0 收藏0
  • Lodash學習筆記 - slice函數(shù)

    摘要:文檔地址中文文檔英文文檔源碼地址第一個函數(shù)是,不過源碼中依賴了,所以第一篇文章就從開始。這個函數(shù)的作用就是裁剪數(shù)組,從下標開始,到下標結(jié)束,但是并不包含,并將結(jié)果作為一個數(shù)組返回。并且注明了這個方法用于代替來確保數(shù)組正確返回。 百忙之中(閑來無事)想抽點時間好好讀一下源碼,于是就選了Lodash來寫一個系列罷。讀源碼順序就按照loadsh文檔順序來。 文檔地址:中文文檔?? 英文文檔源...

    lei___ 評論0 收藏0
  • javascript高級程序設(shè)計》筆記檢測數(shù)組的方法

    摘要:如果網(wǎng)頁中包含多個框架,那實際上就存在兩個以上不同的全局執(zhí)行環(huán)境,從而存在兩個以上不同版本的構(gòu)造函數(shù)。如果你從一個框架向另一個框架傳入一個數(shù)組,那么傳入的數(shù)組與在第二個框架中原生創(chuàng)建的數(shù)組分別具有各自不同的構(gòu)造函數(shù)。 如何檢測某個變量是否為數(shù)組? 《javascript 高級程序設(shè)計》原文摘錄: 自從 ECMAScript 3 做出規(guī)定以后,就出現(xiàn)了確定某個對象是不是數(shù)組的經(jīng)典問題...

    wums 評論0 收藏0
  • javascript高程3 學習筆記(二)

    摘要:的理解函數(shù)與其他語言函數(shù)最大的不同在于,其不介意傳入多少參數(shù)以及參數(shù)的類型比如函數(shù)的形參有兩個,但是調(diào)用函數(shù)傳入的參數(shù)可以寫一個,三個或不寫參數(shù)對應(yīng)等,解析器都可以正常解析,這是因為中參數(shù)在內(nèi)部是以一個數(shù)組形式來表示,故而不需要關(guān)系傳入?yún)?shù) ECMAScript function的理解 ECMAScript 函數(shù)與其他語言函數(shù)最大的不同在于,其不介意傳入多少參數(shù)以及參數(shù)的類型...

    JerryWangSAP 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<