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 ?

Pourquoi les chaînes JavaScript ne peuvent-elles pas avoir de propriétés et comment pouvez-vous contourner cette limitation ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-27 00:17:03459parcourir

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

Pourquoi les chaînes JavaScript ne peuvent-elles pas avoir de propriétés ?

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>

Solutions de contournement pour le tri des dates

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 :

Propriétés d'accesseur ES5

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.

Définir une fonction de tri

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>

Créer un formateur de date personnalisé

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn