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?
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:
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.
Tags und Links javascript