這次為大家帶來web開發中怎樣檢測數組,web開發中檢測數組的注意事項有哪些,下面就是實戰案例,一起來看一下。
JS中最古老的跨域問題之一就是在幀(frame)之間來回傳遞數組。開發者很快就發現instanceof Array在此場景中不總是返回正確的結果。如同上文所提到的,每個影格(frame)都有各自的Array建構子,因此一個影格(frame)中的實例在另一個影格裡不會被辨識。 Douglas Crockford首先推薦使用“鴨式辨型”接口(duck typing)“鴨式辨型”是由作家James Whitcomb Riley首先提出的概念,即“像鴨子一樣走路、游泳並且嘎嘎叫的鳥就是鴨子”,本質上是專注於“對象能做什麼”,而不要專注於“對像是什麼”。
// 采用鸭式辨型的方法检测数组function isArray(value) { return typeof value.sort === "function"; }
這種偵測方法依賴一個事實,即陣列是唯一包含sort()方法的物件。當然,如果傳入isArray()的參數是一個包含sort()方法的對象,它也會回傳true。
關於如何在JS中檢測數組類型已經有很多研究了,最終,Juriy Zaytsev(也被稱作Kangax)給出了一種優雅的解決方案。
function isArray(value) { return Object.prototype.toString.call(value) === "[object Array]"; }
Kangax發現呼叫某個值的內建toString()方法在所有瀏覽器中都會傳回標準的字串結果。對陣列來說,傳回的字串為"[object Array]",也不用考慮陣列實例是在哪個訊框(frame)中被建構出來的。 Kangax給出的解決方案很快就流行起來,並被大多數JS類別庫所採納。
這種方法在辨識內建物件時往往十分有用,但對於自訂物件請不要用這種方法。例如,內建JSON物件使用這種方法將會回傳"[object JSON]"。
從那時起, ECMAScript5將Array.isArray()正式引入JS。唯一的目的就是要準確地偵測一個值是否為陣列。同Kangax的函數一樣, Array.isArray()也可以偵測跨幀(frame)傳遞的值,因此許多JS類別函式庫目前都類似地實作了這個方法。
相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!
推薦閱讀:
以上是web開發中怎樣檢測數組的詳細內容。更多資訊請關注PHP中文網其他相關文章!