Ermitteln, ob ein Javascript-Objekt ein "komplexes" Objekt oder nur eine Zeichenfolge ist

7

Ich möchte in der Lage sein, ein String-Literal zu übergeben,

%Vor%

oder ein JavaScript-Objekt,

%Vor%

als Argument für eine Funktion und verschiedene Aktionen abhängig davon, ob es sich um eine Zeichenfolge oder ein Objekt handelt. Wie kann ich feststellen, was wahr ist?

Um genau zu sein, möchte ich über die Eigenschaften eines Objekts iterieren und etwas analysieren, wenn eine Eigenschaft eine Zeichenkette ist, aber rekursiv verschachtelt wird, wenn die Eigenschaft ein Objekt ist. Ich habe herausgefunden, wie man $.each() verwendet, um über die Eigenschaften des Objekts zu iterieren, aber wenn ich das nur mit der Zeichenfolge mache, behandelt es die Zeichenfolge als ein Array von Buchstaben und nicht als eine einzige Sache. Kann ich das auf andere Weise umgehen?

    
Tomas Lycken 22.07.2010, 10:15
quelle

6 Antworten

6
%Vor%

jQuery

%Vor%

Es gibt ähnliche Methoden wie $.isArray() oder $.isFunction() innerhalb der jQuery-Bibliothek.

Natives JavaScript

%Vor%

Die Verwendung von hack'ish way mit toString hat den Vorteil, dass Sie feststellen können, ob es sich um really ein Objekt und array handelt. Sowohl Objekte als auch Arrays würden object mit typeof element zurückgeben.

Kurz gesagt, Sie können sich nicht darauf verlassen, dass der Operator typeof zwischen wahrem objects und arrays unterscheidet. Dafür brauchst du das toString.call() . Wenn Sie nur wissen müssen, ob es ein Objekt ist oder nicht, ist typeof einfach in Ordnung.

    
jAndy 22.07.2010, 10:19
quelle
5
%Vor%

Daher:

%Vor%

UPDATE:

Einige weitere Überlegungen:

  1. Siehe @Andy E unten.

  2. typeof null gibt auch "object" zurück. Dasselbe gilt für jedes andere Objekt, einschließlich Arrays.

Daniel Vassallo 22.07.2010 10:19
quelle
4

Versuchen Sie Folgendes:

%Vor%

Danke an Andy E für den Tipp mit argument.constructor .

    
jigfox 22.07.2010 10:19
quelle
2

Probieren Sie den typeof -Operator aus. Es gibt object für Objekte und string für Strings zurück.

    
Anders Lindahl 22.07.2010 10:18
quelle
1

Sie können so etwas tun

%Vor%     
AutomatedTester 22.07.2010 10:20
quelle
1

Ich hatte ein ähnliches Problem und ich denke, ich habe eine Lösung gefunden. Hier ist mein Beispielcode für jeden, der interessiert ist.

%Vor%

Dadurch werden alle Eigenschaften eines Objekts durchlaufen - auch wenn die Eigenschaften selbst Objekte sind - und eine Zeichenfolge mit den folgenden Werten in Punktsyntax zurückgegeben.

%Vor%

Ich habe die Inspiration von DavidPirek.com - Danke Mr Pirek!

    
Julian 05.01.2011 17:00
quelle

Tags und Links