[英]How can I tell 'Whether a Javascript object exists on my page'?
[英]How can one tell whether a given object is an Array or an Object?
好吧,所以這里沒什么花哨的,只是一些JSON:
var a = ["foo", "bar", "baz"];
var o = {a: "foo", b: "bar", c: "baz"};
但是,當我們這樣做時會發生什么呢?
typeof a; // => "object"
如果我能使該命令說“數組”,我就很喜歡。 但是我不能。 有什么區別的方法嗎?
使用instanceof
運算符 。
if (a instanceof Array)
請記住,所有數組都是對象(因為對象位於數組的原型鏈上),因此要區分必須與Array
構造函數進行比較的數組和非Array
,就不能為此使用Object
構造函數。
如果您不在多window
環境中,則可以檢查構造函數...
var isArray = possiblyAnArray.constructor == Array;
...或使用instanceof
...
var isArray = possiblyAnArray instanceof Array;
這些將無法在多window
環境中工作,因為不同窗口的Array
構造函數將擁有不同的引用。 在這種情況下,您需要以較慢的方式執行此操作...
var isArray = ({}).toString.call(possiblyAnArray) == "[object Array]";
我也看到了另一種方法,該方法很容易實現,但不能保證嚴格告訴您什么是Array
。
Array.prototype.isArray = true;
var isArray = [].isArray;
我不建議您使用它,但是看看它是如何工作的很有趣。
您可以檢查對象是否為Array
的實例:
var isArray = a instanceof Array;
另一種方法是使用鴨子類型。 這取決於用例。
例如,如果您要對數組中的項目進行計數,而這不是您可以在JSON對象中進行的操作,則可以嘗試:
if (typeof(obj.length) !=="undefined"){ //do whatever}
這將使您可以選擇將代碼基於對象屬性,而不是基於其真實的類,在某些情況下,它們可能不太相關。
剛剛發現:這有什么問題嗎?
var a = [4,5,6,7];
if(typeof a === object) a.type = "object";
if(a.__proto__ === Array.prototype) a.type = "array";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.