方法1:檢測陣列,在ecmascript3中,對於乙個網頁或乙個全域性作用域而言,使用instanceof即可:
if(arr instanceof array) {}
問題:(1)它假定只有乙個全域性執行環境,如果網頁中包含多個框架,那實際上就存在兩個以上不同的執行環境,從而存在兩個及以上不同的array建構函式。如果你從乙個框架向另乙個框架傳入乙個陣列,那麼傳入的陣列與第二個框架中原生建立的陣列分別具有各自不同的建構函式。
(2)在檢測物件是原生物件還是開發人員自定義物件時也會有問題。
方法2:為解決上述問題,ecmascript5中新增了方法 array.isarray(arr)
if(array.isarray(arr)) {}
注意:這個方法的目的是最終確定的某個值到底是不是陣列,而不管它是在哪個全域性執行環境中建立的。支援該方法的瀏覽器有:ie9+ firefox4+ safari5+ opera10.5+ chrome
方法3:對於尚未實現array.isarray()這個方法的瀏覽器使用下列方法①檢測是否是原生陣列:
function isarray(arr)
//此處對函式及正規表示式的檢測進行擴充套件
②檢測是否是原生函式;
function isfunction(arr)
③檢測是否是正規表示式:
function isregexp(arr)
原理:在任何值上呼叫object原生的tostring()方法,都會返回乙個[object nativeconstructorname]格式的字串。每個類的內部都有乙個[[class]]屬性,這個屬性中就指定了該字串的建構函式名。由於原生陣列的建構函式與全域性作用域無關,因此使用tostring()就能保證返回一致的值。
注意:①對於在ie中以com物件形式實現的任何函式,isfunction()都將返回false(因為它們並非原生js函式)
②這一技巧也廣泛應用於檢測json物件。object的tostring()方法不能檢測非原生建構函式的建構函式的建構函式名。因此,開發人員定義的任何建構函式都將返回[[object object]].有些js庫會包含下列**:
var isnativejson = window.json && object.pototype.tostring.call(json) == "[object json]";
//在web開發中能夠區分原生與非原生js物件非常重要,只有這樣才能確切知道某個物件到底有哪些功能。注意:object.prototype.tostring()本身也可能被修改。此處討論的前提是object.prototype.tostring()是未被修改的原生版本。
js中的陣列遍歷和檢測陣列
for i 0 i簡單來說 最簡單的一種,也是使用頻率最高的一種,雖然效能不弱,但仍有優化空間 eg var a new array first second third for var i 0 i a.length i 輸出的結果 fitst,second,thirdfor i in arr 簡單...
陣列檢測(js小知識)
陣列檢測 1.通過object tostring call arr 當然這種方法一樣可以檢測任意型別。var arr 1 2,3 4 object tostring call arr object array object tostring call object object 2.instance...
JS中型別的檢測
在js開發中,經常需要檢測乙個變數的型別。現在就總結一下常見的檢測變數型別的方法,以及它們的適用場景。一 typeof 要檢測乙個變數是不是基本資料型別,typeof是最佳的工具。也就是說,typeof是確定乙個變數是字串 數值 布林值還是undefined的最佳工具。但如果變數是乙個物件或者nul...