Unterschied in diesen 2 Strings (JavaScript)
Ich habe versucht, String-Datentypvariablen mit Werten auf zwei Arten zu erstellen .
- Als String-Literal
- Neues Schlüsselwort verwenden
Mir scheint jedoch, dass beide in der Darstellung auf console.log unterschiedlich sind . Kann mir jemand sagen, ob der 2. Weg keinen String zurückgibt oder ob er anders ist?
var str1 = "abc";
var str2 = new String("def");
console.log(str1);
console.log(str2);
Erwartet:
abc, def
Ausgabe:
Antworten
JavaScript hat zwei Haupttypkategorien, Grundelemente und Objekte.
typeof new String(); // "object"
typeof ''; // "string"
Für Anweisungen zum Zuweisen primitiver Werte zu einer Variablen wie:
var str1 = "Hi";
JavaScript erstellt die Variable intern mit:
String("Hi")
Die Verwendung des neuen Schlüsselworts funktioniert anders und gibt stattdessen ein Objekt zurück.
Beim Aufrufen new String(something)wird ein String-Instanzobjekt erstellt.
Die Ergebnisse sehen über console.log () gleich aus, da nur der primitive String aus der String-Instanz extrahiert wird, die Sie an ihn übergeben.
Also: einfach nur String () gibt ein String-Grundelement zurück. new String ('xyz') gibt ein vom String-Konstruktor erstelltes Objekt zurück.
Es ist selten notwendig, eine String-Instanz explizit zu erstellen.
Sie arbeiten mit zwei verschiedenen Dingen. Das var str1 = "abc"gibt dir ein Primitiv. Während das var str2 = new String("def");Ihnen ein String-Objekt gibt. Diese beiden Typen verhalten sich unterschiedlich
Mit dem String-Objekt können Sie mit einer Reihe von Zeichen arbeiten. Es umschließt den primitiven String-Datentyp von Javascript mit einer Reihe von Hilfsmethoden.
Da JavaScript automatisch zwischen Zeichenfolgenprimitiven und Zeichenfolgenobjekten konvertiert, können Sie eine der Hilfsmethoden des Zeichenfolgenobjekts für ein Zeichenfolgenprimitiv aufrufen.
Wenn Sie ein Objekt drucken, druckt die Konsole häufig die Eigenschaften des Objekts.
Wenn es sich um ein Grundelement handelt, druckt die Konsole einfach den Wert.
Das Grundelement ist nicht eingerahmt. Wenn Sie jedoch eine Zeichenfolge mit einem Konstruktor erstellen, wird die Zeichenfolge im Objekt eingerahmt und hat immer Eigenschaften.
Wenn es sich nur um ein Literal handelt, hat es nur Eigenschaften, wenn Sie mit dem .Operator auf die Eigenschaft einer Zeichenfolge zugreifen, da das Boxen auftritt. Danach ist es jedoch immer noch ein Literal, dem nichts hinzugefügt wird. Aus diesem Grund drucken Sie beim Drucken "The cat is very grumpy"nur den Wert und nichts Mehr. Primitive Literale sind nicht immer Objekte mit Eigenschaften, sondern nur Objekte, wenn sie eingerahmt sind.