Überprüfung des Typs einer Variablen

8

Was ist der beste Weg herauszufinden, ob eine Variable eine Zeichenkette ist oder nicht (und ebenso eine Zahl, ein Boolescher Wert usw.)?

Normalerweise finden Sie:

%Vor%

Aber die Leute vergessen, dass man String-Objekte auch direkt mit var foo = new String("bar"); erstellen kann - ob das eine gute Idee ist oder nicht, ist eine ganz andere Sache.

Also, wie geht es hier? Ich kann mir verschiedene Ansätze (etwas vereinfacht) vorstellen - und gesehen haben:

%Vor%

oder

%Vor%

oder

%Vor%

Gibt es einen "besten" Weg, dies zu tun? Oder sind sie alle gleichwertig?

    
n3rd 28.01.2011, 13:08
quelle

1 Antwort

5

Unter den drei vorhandenen Optionen fühlt sich die erste ziemlich hackig an, weil sie einen regulären Ausdruck verwendet, um die Zeichenfolgendarstellung von value.constructor zu testen. Es funktioniert, aber es fühlt sich immer noch hacky an (vielleicht ist es nur ich).

Die zweite Option würde nur für Zeichenfolgenliterale funktionieren, Zeichenfolgen, die durch Verketten vorhandener Objekte erstellt werden, und Objekte, die mit dem new String() -Konstruktor erstellt wurden. Die dritte Option sollte mit Objekten arbeiten, die mit dem new String() -Konstruktor oder einem anderen erbenden Objekt erstellt wurden von String() (Ich bin mir nicht sicher über die Vererbung von JavaScript; kann jemand das bestätigen?) .

Die Eigenschaft constructor existiert auch für Grundelemente / Literale, nicht nur für Wrapper-Objekte, die mit new erstellt wurden. Dies macht die typeof Prüfung in der zweiten Option ziemlich überflüssig:

%Vor%

Im Gegensatz zur dritten Option funktioniert es jedoch möglicherweise nicht mit Objekten mit anderen Konstruktoren als String() , die von String() erben.

Meine Antwort verwendet Strings als Beispiel, um die Frage zu reflektieren, aber die gleiche Idee gilt für Number , Boolean , Function , Object , Array und andere Typen.

    
BoltClock 28.01.2011, 13:14
quelle

Tags und Links