Heim > Artikel > Web-Frontend > Warum können JavaScript-Strings keine Eigenschaften haben und wie können Sie diese Einschränkung umgehen?
In JavaScript gibt es acht primitive Typen: Undefiniert, Null, Boolean, Number, BigInt, String, Symbol, und der nicht-primitive Typ Object. Primitive Werte wie Zeichenfolgen können keine Eigenschaften haben. Bei Objekten hingegen ist dies möglich.
Der Versuch, eine Eigenschaft zu einem primitiven Wert hinzuzufügen, beispielsweise einem String, führt zu einem No-Op im losen Modus oder zu einem TypeError im strikten Modus. Dies liegt daran, dass JavaScript solche Zuweisungen als einen Versuch interpretiert, den Wert der Variablen festzulegen, und nicht als eine neue Eigenschaft zu erstellen.
<code class="js">var test = "test"; test.test = "test inner"; console.log(test); // "test" console.log(test.test); // undefined</code>
Während Sie Zeichenfolgen keine Eigenschaften hinzufügen können gibt es Problemumgehungen, um die Datumssortierung in Ihrem Raster zu erleichtern:
ES5 hat Accessor-Eigenschaften eingeführt, mit denen Sie Getter- und Setter-Funktionen für Eigenschaften definieren können. Sie könnten eine Accessoreigenschaft für den String-Prototyp definieren, die ein Datumsobjekt zurückgibt:
<code class="js">Object.defineProperty(String.prototype, 'date', { get: function () { return new Date(this); } }); var dateString = "2023-05-18"; var dateObject = dateString.date; console.log(dateObject); // Date { 2023, 4, 18 ... }</code>
Das Ändern des integrierten String-Prototyps gilt jedoch als schlechte Praxis.
Alternativ können Sie eine benutzerdefinierte Sortierfunktion definieren, die Datumszeichenfolgen erkennt und sie entsprechend vergleicht:
<code class="js">function compareDates(a, b) { var dateA = new Date(a); var dateB = new Date(b); return dateA - dateB; } var gridData = ["2023-05-18", "2022-12-15", "2021-08-23"]; gridData.sort(compareDates); console.log(gridData); // ["2021-08-23", "2022-12-15", "2023-05-18"]</code>
Sie können den JavaScript-Datumskonstruktor erweitern mit einer benutzerdefinierten Formatierungsfunktion, die eine sortierfreundliche Zeichenfolgendarstellung zurückgibt:
<code class="js">Date.prototype.toSortedString = function () { return this.getFullYear() + "-" + (this.getMonth() + 1) + "-" + this.getDate(); }; var sortedByDate = dates.map(function (date) { return new Date(date).toSortedString(); }); sortedByDate.sort(); console.log(sortedByDate); // ["2021-08-23", "2022-12-15", "2023-05-18"]</code>
Das obige ist der detaillierte Inhalt vonWarum können JavaScript-Strings keine Eigenschaften haben und wie können Sie diese Einschränkung umgehen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!