Der Datentyp "string" ist ein primitiver Datentyp. Er hat keine Methoden,
Doch hat er. Sonst würde ja ein
String(str).replace()
nicht funktionieren.
Lese noch mal nach, was ich zum "Ummanteln" geschrieben habe. Im Speicher ist beim Typ String kein Objekt, sondern nur die trockenen Daten - also keine Methode, Eigenschaft e.t.c. - Der Grund? Das spart offensichtlich eine Menge Platz.
Wenn Du auf dieses ETWAS von Typ String die String-Methoden anwendest oder nach String-Eigenschaften abfragst, dann packt JS die Daten temporär in ein anonymes Objekt, führt die Methode aus und vergisst das dafür angelegte Objekt spätestens dann wieder, wenn es nicht noch mal gebraucht wird. Davon sieht man freilich nichts, der Vorgang ist völlig transparent.
Und console.log( typeof String('asdf') ); zeigt string
Ja. Klar. Aber eben nicht "object" wie es bei
console.log( typeof( new String('asdf') ) );
der Fall ist.