Bis vor kurzem erkannte ich nicht, dass es in JavaScript zwei Arten von Strings (und Bools und Zahlen) gibt: Primitive wie "blah"
und Objekte wie new String("blah")
.Liefern Standard-JavaScript-APIs oder -Bibliotheken Zeichenfolgen als String-Objekte?
Sie in sehr „Gotcha“ -prone Weise unterscheiden, die größte von denen die verschiedenen typeof
Wert ("string"
vs "object"
) zu sein scheint, aber eine Reihe anderer Unterschiede bestehen, einige documented at MDN.
Es macht keinen Sinn, String-Objekte zu erstellen, da die primitiven Strings genauso gut funktionieren, und JSHint even treats this as an error. Daher möchte ich wirklich vorgeben, dass String-Instanzen nicht einmal existieren und nur einfache Strings in meinem Code unterstützen.
Das lässt mich fragen: Kann ich eine Überraschung String-Instanz durch Aufruf einer Standard-API, die eine Zeichenfolge zurückgibt? Oder ist es wirklich sicher anzunehmen, dass, wenn jemand nicht durch ausdrückliches Schreiben new String
vermasselt, ich nie einen von diesen sehen werde?
Was meinen Sie mit einer "Standard JavaScript API"? Die nativen JS-Funktionen? Das DOM Apis? Node.js Module? – Bergi
@Bergi Die nativen Funktionen, die DOM-APIs und eine vage definierte "populäre JS-Bibliotheken". Die Frage ist nicht, ob es theoretisch möglich ist, einem zu begegnen (die Antwort darauf ist offensichtlich), aber ob es dumm wäre anzunehmen, ich würde es in keiner vernünftig kodierten Anwendung sehen. –