Schauen wir uns zunächst einige Testcodes wie diesen an, um zu sehen, welche Probleme wir darin finden können:
var str="likeke";
str;//"likeke"
str.length;//6
str.age=22;
str.age;//undefiniert;
var mystr=new String ("likeke");
mystr;//String {0: "l", 1: "i", 2: "k", 3: "e", 4: "k ", 5: „e“, Länge: 6, [[PrimitiveValue]]: „likeke“}
mystr.length;//6
mystr.age=22;
mystr .age;//22
Erste Frage: Warum kann der Basistyp-String auf das Längenattribut zugreifen?
Zweite Frage: Der Wrapper-Typ des Strings kann auf benutzerdefinierte Attribute zugreifen Warum kann nicht auf den Basistyp-String zugegriffen werden?
Grund: 1. Wenn wir auf ein Attribut einer Basistypzeichenfolge in Form eines Objekts zugreifen oder ein neues Attribut dafür erstellen, konvertiert die js-Engine es in das entsprechende Verpackungstypobjekt
2. Wenn wir ein benutzerdefiniertes Attribut hinzufügen, wird das temporäre Objekt sofort zerstört. Daher erscheint ein erneuter Zugriff auf diese Eigenschaft (die auch wieder in ihren Wrapping-Typ konvertiert wird) als undefind .
Neben String haben auch andere Grundtypen ähnliche Prinzipien, zum Beispiel (666).toString().length;//3