Maison > Article > interface Web > Pourquoi les chaînes JavaScript ne peuvent-elles pas avoir de propriétés et comment pouvez-vous contourner cette limitation ?
En JavaScript, il existe huit types primitifs : Undefined, Null, Boolean, Number, BigInt, String, Symbol, et le type Object non primitif. Les valeurs primitives, telles que les chaînes, ne peuvent pas avoir de propriétés. Les objets, en revanche, le peuvent.
Tenter d'ajouter une propriété à une valeur primitive, telle qu'une chaîne, entraînera une non-opération en mode lâche ou une TypeError en mode strict. En effet, JavaScript interprète de telles affectations comme une tentative de définir la valeur de la variable, et non de créer une nouvelle propriété.
<code class="js">var test = "test"; test.test = "test inner"; console.log(test); // "test" console.log(test.test); // undefined</code>
Bien que vous ne puissiez pas ajouter de propriétés aux chaînes , il existe des solutions de contournement pour faciliter le tri des dates dans votre grille :
ES5 a introduit les propriétés d'accesseur, qui vous permettent de définir des fonctions getter et setter pour les propriétés. Vous pouvez définir une propriété d'accesseur sur le prototype String qui renvoie un objet date :
<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>
Cependant, modifier le prototype String intégré est considéré comme une mauvaise pratique.
Vous pouvez également définir une fonction de tri personnalisée qui reconnaît les chaînes de date et les compare en conséquence :
<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>
Vous pouvez étendre le constructeur de date JavaScript avec une fonction de formatage personnalisée qui renvoie une représentation sous forme de chaîne triée :
<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>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!