技術頻道導航
HTML/CSS
.NET技術
IIS技術
PHP技術
Js/JQuery
Photoshop
Fireworks
服務器技術
操作系統(tǒng)
網站運營

贊助商

分類目錄

贊助商

最新文章

搜索

JavaScript檢查對象是否數組的最快方法

作者:admin    時間:2022-6-1 11:34:22    瀏覽:

在上一文中,介紹了JavaScript檢查對象是否數組的5種方法,不過未對它們的性能進行比較,本文將介紹,這5種方法中,哪種方法最好用?哪種方法運行起來是最快的?

各種方法的速度比較

有開發(fā)人員使用 jsPerf 比較了在 JavaScript 中檢查數組的各種方法,下面是得到的結果:


點擊圖片放大

你如果對這幾種方法還不夠了解,請參看文章JavaScript檢查對象是否數組的5種方法。

結果顯示,Array.isArray().constructor 或者 instanceof 一樣快,但是 Object.prototype.toString.call([]) 比較慢。

這個結果可能讓一些人比較失望,因為更多人使用的方法是 Object.prototype.toString.call([]),而這種方法卻是最慢的。

結果顯示Array.isArray()的速度是最快的,盡管你的個人偏好可能并不是它。

使用帶有空檢查的 .constructor,運行速度排在倒數第二。

但是,如果你是 Object.prototype.toString.call([]) 的粉絲,請不要擔心!差異表明,這種稍慢的方法仍然非??欤涸谖业募矣?PC 上每秒執(zhí)行超過 700,000,000 次操作。

因此,除非你進行數萬億次數組檢查,否則通過將任何一種方法換成另一種方法,你不會看到代碼速度的顯著差異。 

5種檢查方法使用哪種合適?

因為關鍵字 typeofnull 和所有對象(包括數組)返回“object”,所以檢查數組需要另外的方法。

特定于數組的方法

ES5 輔助方法 Array.isArray() 將快速簡單地告訴你任何 JavaScript 變量是否為數組: Array.isArray([]) // true,它適用于 nullundefined(但不適用于未聲明的變量)。

自 Internet Explorer 9 以來,所有瀏覽器都廣泛支持 Array.isArray() 方法,因為它是 ECMAScript 5 規(guī)范的一部分。

你可能會看到使用了 instanceof:[] instanceof Array // true,但不推薦使用 instanceof,因為它在 iframe 中不起作用。

適用于任何對象的方法

有幾種方法可用于檢查數組,因為它們可用于確定任何 JavaScript 對象的類型。

更通用的方法 Object.prototype.toString.call([]) // "[object Array]" 將告訴你任何值是什么類型的對象,包括原語。

為了只捕獲類型,可以使用 .slice() 處理該字符串: Object.prototype.toString.call([]).slice(8,-1) // Array

同樣, .constructor 屬性將返回 JavaScript 值的構造函數。對于數組,這是內置的全局函數 Array()。

該函數可以與全局對象進行比較,或者構造函數的 .name 屬性可以作為字符串訪問:[].constructor.name // "Array"。

但是,.constructor 的缺點是可以為其分配一個新值,從而否定你的數組檢查: [].constructor = 3 // 有效

檢查未聲明的數組

關鍵字 typeof 不會將數組與其他對象區(qū)分開來,盡管 typeof 對于篩選出未聲明的變量仍然很有用。

typeof 關鍵字返回“object”時,我們知道變量已被聲明并分配了一個對象或一個空值。

同時,typeof 將為未聲明的變量返回“undefined”而不是拋出 ReferenceError,如果你認為你可能正在使用未聲明的變量,則首先檢查 typeof 很有用。

一旦我們知道變量是使用 typeof 聲明的(無論是 === "object" 還是 !== "undefined"),我們就可以確定地使用 Array.isArray()。

檢查空數組

最后,當我們確定我們有一個數組時(即當 Array.isArray() 返回 true 時),我們可以使用 .length 檢查數組是否為空。

.length0 表示一個空的 JavaScript 數組 [] ,而一個 .length > 0 的數組表示一個非空數組。

請注意,空數組 [] 是真實的,這意味著它在評估為布爾值時返回 true。([] 是真實的,因為所有對象都是真實的。)

檢查數組的最佳方法

我介紹了 5 種不同的檢查 JavaScript 數組的方法。我在編碼時通常使用 Array.isArray() 有幾個原因:

  • Array.isArray() 快速且得到廣泛支持。
  • Array.isArray() 是顯式的,使您的代碼更具可讀性。
  • Array.isArray() 為 null 和未定義返回 false。

有時,在我擔心未聲明變量的罕見情況下,我會將數組檢查包含在 if(typeof !== "undefined") 語句中。

總結

本文介紹了JavaScript檢查對象是否數組的幾種方法的速度比較,以及各種方法的優(yōu)點和缺點。在使用任何一種方法的時候,都應該考慮其存在的問題,以免判斷失準。

參考文章

相關文章

標簽: 數組  對象  
x