Heim  >  Artikel  >  Web-Frontend  >  Warum können JavaScript-Strings keine Eigenschaften haben und wie können Sie diese Einschränkung umgehen?

Warum können JavaScript-Strings keine Eigenschaften haben und wie können Sie diese Einschränkung umgehen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-27 00:17:03554Durchsuche

Why can't JavaScript strings have properties and how can you work around this limitation?

Warum können JavaScript-Strings keine Eigenschaften haben?

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>

Problemumgehungen für das Sortieren von Daten

Während Sie Zeichenfolgen keine Eigenschaften hinzufügen können gibt es Problemumgehungen, um die Datumssortierung in Ihrem Raster zu erleichtern:

ES5-Accessor-Eigenschaften

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.

Definieren Sie eine Sortierfunktion

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>

Erstellen Sie einen benutzerdefinierten Datumsformatierer

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn