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

資訊專欄INFORMATION COLUMN

[學習筆記] JavaScript 檢測數組

ZweiZhao / 1553人閱讀

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

JS的經典問題之一就是“檢測一個對象是不是數組”,本文總結了3種檢測方法。

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

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

如果只有一個全局執行環境,可以用 instanceof 檢測數組。

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

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

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

var arr = [];
isArray(arr);

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

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

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

// 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()方法不能檢測非原生的構造函數的構造函數名,因此,開發人員定義的任何構造函數都將返回[object Object]。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/85777.html

相關文章

  • JavaScript框架學習筆記(一)

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

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

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

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

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

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

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

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

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

    JerryWangSAP 評論0 收藏0

發表評論

0條評論

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