Hilfe bei Javascript - wieso ist "string" kein String?

4 Antworten

Du addierst zwei Objekte und ich vermute mal, dass Javascript diese Objekte dann in den einfachen Standardtyp string umwandelt. Damit wird dann "" + "" = "" daraus. Das ist dann aber noch kein String-Objekt.

Woher ich das weiß:Berufserfahrung – Entwickle Webseiten seit über 25 Jahren.

Es gibt zwei Arten von Strings: primitive Strings und String-Objekte.

Ein primitiver String ist ein einfacher Textwert, der zum Typ string gehört z.B. "Hello world!".

String-Objekte hingegen werden intern mit new String() erstellt, was sie zu Objekten macht, die den Typ object haben. Ein Beispiel dafür ist 'new String("Hello world!")'.

Wir merken uns: Es gibt zwei unterschiedliche Arten von Strings und zwei unterschiedliche Arten den String-Typ zu erkennen (typeof() und instanceof String)

typeof() gibt dir den Typen der Variable zurück:
"Hello world" = string (primitiver String)
new String("Hello world!") = object (Objekt String)

instanceof String prüft, ob es sich um ein Objekt String handelt und gibt true oder false zurück:
"Hello world" = false (primitiver String)
new String("Hello world!") = true (Objekt String)

Wenn du let x = {} + {} schreibst, wird daraus ein primitiver String. Beide leeren Objekte {} werden durch den + Operator in Strings umgewandelt. Da {} ein Objekt ist, gibt die Umwandlung immer den Wert "[object Object]" zurück. Deshalb ergibt {} + {} den String "[object Object][object Object]". Die Umwandlung von Objekten zu Strings folgt der standardmäßigen toString() Methode von Objekten, die "[object Object]" zurückgibt.

Woher ich das weiß:Berufserfahrung

Weil es intern anscheinend einen Unterschied zwischen string und String gibt.

JavaScript ist case-sensitive.

Woher ich das weiß:Hobby

Kelec  09.01.2025, 23:59

Das hat damit nicht direkt etwas zu tun weil dynamische typisierung ja nur bedeutet, dass der Typ einer Variable nicht angegeben werden muss und sich implizit ändern kann.

Eine Variable hat aber auch bei Javascript zu jedem Zeitpunkt einen bestimmten Typ, sonst hätte instanceof auch keinen Sinn. In dem Fall ist der Typ string aber nicht String.

NorbertWillhelm  10.01.2025, 00:00
@Kelec

Ist mir im Nachhinein auch aufgefallen. Ich habe mich geirrt. Wie soll ich verfahren?

string ist ein Primitive Datatype für diesen Funktioniert Instaceof nicht denn das funktioniert nur für Klassen.

string ist der primitive Datatype und String ist hingegen der objektorientierte Typ. Damit ist string eben keine Instanz von String.