HOWTO · JavaScript

Wie überprüft man, ob eine Variable eine Zeichenkette in JavaScript ist

Dieses Tutorial erklärt, wie man in JavaScript prüft, ob eine Variable ein String ist oder nicht

Auf dieser Seite

Mit typeof value === "string" prüfen Sie, ob ein Wert ein primitiver String ist. Für die Validierung ist das normalerweise die richtige Wahl. Einfache und doppelte Anführungszeichen sowie Backticks erzeugen primitive Strings; die Art der Anführungszeichen ändert den Typ nicht.

Primitive Strings mit typeof prüfen

Der Operator typeof gibt für einen primitiven String den String "string" zurück. Vergleichen Sie das Ergebnis mit genau diesem Wert. Bei Zahlen, booleschen Werten, null und Objekten ist der Vergleich falsch. Das funktioniert mit lokalen Werten, Funktionsargumenten und Werten, die von anderem Code stammen.

Führen Sie dieses Beispiel aus:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

const primitive = "hello";
const boxed = new String("hello");
const number = 42;

console.log(typeof primitive);
console.log(typeof boxed);
console.log(typeof number === "string");
string
object
false

Der primitive Wert ergibt "string"; der mit new String("hello") erzeugte Wert ergibt "object"; und 42 besteht den Vergleich auf einen primitiven String nicht. Verwenden Sie bei der Validierung eines Werts den Vergleich typeof value === "string".

Entscheiden, ob String-Objekte akzeptiert werden sollen

JavaScript kennt auch String-Objekte, manchmal als umschlossene Strings bezeichnet. new String("hello") erstellt ein solches Objekt, während String("hello") ohne new einen primitiven String zurückgibt. Bevorzugen Sie primitive Strings: Bei umschlossenen Werten kann das Objektverhalten bei Vergleichen und in APIs zu unerwarteten Ergebnissen führen.

Die Prüfung mit typeof akzeptiert primitive Strings und weist String-Objekte zurück, denn typeof new String("hello") ergibt "object". Für die Eingabevalidierung ist das normalerweise das richtige Verhalten. Wenn eine API ausdrücklich beide Formen akzeptiert, legen Sie das bewusst fest, statt jede String-Prüfung weniger strikt zu machen.

value instanceof String prüft, ob String.prototype aus der aktuellen Realm in der Prototypkette des Werts vorkommt. Für primitive Strings ergibt die Prüfung false. Sie kann auch bei einem echten String-Objekt false ergeben, wenn dieses in einer anderen Realm erstellt wurde, etwa in einem anderen Browserfenster oder Frame. Die Prüfung beweist nicht, dass ein Objekt die internen Daten eines String-Wrappers besitzt.

Grenzen alternativer Prüfungen verstehen

Object.prototype.toString.call(value) === "[object String]" kann primitive Strings und gewöhnliche String-Objekte erkennen, darunter viele Objekte aus einer anderen Realm. Die Prüfung ist kein allgemeiner Echtheitstest: Objekte können das Ergebnis mit Symbol.toStringTag anpassen. Verwenden Sie sie nur, wenn diese Einschränkung zu den Werten passt, die Ihr Code verarbeitet.

String.prototype.isPrototypeOf(value) prüft, ob String.prototype aus der aktuellen Realm in der Prototypkette eines Objekts vorkommt. Die Prüfung gilt für Objekte, nicht für primitive Werte, und hat eine ähnliche Realm-Einschränkung wie instanceof. Weder diese Methode noch instanceof String beweist, dass der Wert ein echter String-Wrapper ist oder interne String-Daten enthält: Object.create(String.prototype) besteht beispielsweise beide Prototypkettenprüfungen. Die Prüfungen beantworten unterschiedliche Fragen und sind nicht austauschbar. Verwenden Sie für die übliche Typvalidierung typeof value === "string" und entscheiden Sie gesondert, ob umschlossene Objekte zu den akzeptierten Eingaben gehören.

FAQ

Wie prüfe ich, ob eine Variable in JavaScript ein String ist?

Verwenden Sie typeof value === "string", um primitive Strings zu akzeptieren. Für die meisten Anwendungseingaben ist das die übliche Wahl. Wenn Sie auch umschlossene Werte akzeptieren, legen Sie diese Regel gesondert fest; Prüfungen der Prototypkette allein beweisen nicht, dass ein Objekt ein echter String-Wrapper ist.

Was ist der Unterschied zwischen primitiven Strings und String-Objekten?

Ein primitiver String ist ein String-Wert. new String("hello") erstellt ein Objekt, das einen solchen Wert umschließt; deshalb meldet typeof den Typ "object". Bevorzugen Sie primitive Strings, sofern eine API nicht ausdrücklich ein String-Objekt benötigt.

Funktioniert instanceof String mit primitiven Strings?

Nein. instanceof prüft, ob ein Objekt von der String-Konstruktorfunktion der aktuellen Realm erbt. Primitive Strings sind keine Objekte.

Welche Prüfung sollte ich wählen?

Verwenden Sie typeof zur Validierung primitiver Strings. Setzen Sie instanceof String oder String.prototype.isPrototypeOf() nur ein, wenn Sie eine String-Prototypkette aus derselben Realm prüfen müssen; keine der beiden Prüfungen beweist, dass ein Objekt ein echter String-Wrapper ist. Verwenden Sie Object.prototype.toString.call(), wenn Sie primitive und umschlossene Strings erkennen müssen, und berücksichtigen Sie dabei mögliche Anpassungen durch Symbol.toStringTag. Bei einem echten String-Wrapper aus einer anderen Realm können die Prüfungen der Prototypkette derselben Realm fehlschlagen.