2013-04-26 8 views
13

Woher weiß man, ob ein Objekt Array ist oder nicht?Array-Objekt identifizieren

var x=[]; 

console.log(typeof x);//output:"object" 
alert(x);//output:[object Object] 
console.log(x.valueOf())//output:<blank>? what is the reason here? 
console.log([].toString()); also outputs <blank>  
Object.prototype.toString.call(x) output:[object Array] how? 

seit console.log ([]. ToString()); Ausgänge: blank

1. Platz:

, warum ich in der 2. letzte Anweisung leer bekommen?

2.:

Gibt es eine Möglichkeit, genau zu wissen, was ein Objekt ist: Array oder schlicht Objekt ({}) ohne die Hilfe ihrer jeweiligen Methoden wie x.join() zeigt x ist ein Array nicht auf diese Weise.

Eigentlich in jquery Auswahl wie $ ("p") gibt jquery Objekt so, wenn ich verwende

console.log(typeof $("p"));//output:"object 

Ich wollte nur den tatsächlichen weiß Namen von der Object.Thats u it.thank für u helfen

+0

einen Blick in diese andere Frage Nehmen http://stackoverflow.com/questions/767486/how-do-you-check-if- a-variable-ist-ein-array-in-javascript – acj

Antwort

8

In reinen JavaScript Sie folgende Cross-Browser-Ansatz verwenden:

if (Object.prototype.toString.call(x) === "[object Array]") { 
    // is plain array 
} 

jQuery hat special method dafür:

if ($.isArray(x)) { 
    // is plain array 
} 
+0

console.log ([]. valueOf()) // Ausgabe: ? Was ist der Grund hier? –

+0

@Maizere Im Grunde ''] .valueOf() '' '' 'zurückgibt, und ergibt hier keinen Sinn. – VisioN

+0

danke, es half –

1

Ganz einfach:

if(Object.prototype.toString.call(someVar) === '[object Array]') { 
    alert('Array!'); 
} 
2

Best Practice ist der Aufruf von Object.prototype.toString() auf dem Zielobjekt, die die internen [[Class]] Eigenschaftsnamen anzeigt.

Object.prototype.toString.call(x); // [object Array] 

Dies hat den adventage, dass es auf jedem und jedes Objekt arbeitet, unabhängig davon, ob Sie in einem Multi Frame/Fenster Umgebung arbeiten, die Probleme bei Verwendung von x instanceof Array verursacht.


Neuere ES5 Implementierungen geben Ihnen auch die Methode Arrays.isArray(), die true oder false zurückgibt.

Array.isArray(x); // true 

Und last but not least, hat jQuery seine ganz eigene .isArray() Methode, die auch ein boolean

jQuery.isArray(x); // true 
0

wie dieses Ich glaube, Sie suchen nach etwas zurückgibt:

if(Object.prototype.toString.call(someVar) === '[object Array]') { 
    alert('Array!'); 
} 

Hoffe das hilft.Ein wenig zu bremsen: P

+1

Ja, das wurde schon zwei- oder dreimal gepostet. –

3

Sie instanceof verwenden können. Hier einige FireBug Test:

test1 = new Object(); 
 
test2 = new Array(); 
 
test3 = 123; 
 

 
console.log(test1 instanceof Array); //false 
 
console.log(test2 instanceof Array); //true 
 
console.log(test3 instanceof Array); //false

+1

Vielleicht wäre der Downvoter so nett zu erklären, warum die -1, um zu lernen :) – LeonardChallis

+1

War ich nicht (ehrlich gesagt, ich denke nicht, dass das falsch genug ist, um einen Downvote zu verdienen), aber das scheitert in mehreren DOM-Umgebungen wie Iframes und dergleichen. Weitere Informationen finden Sie in diesem Artikel (http://perfectionkills.com/instanceof-sidered-harmful-or-how-to-write-a-robust-isarray/). –

+0

toll - danke :) – LeonardChallis