Rumah  >  Artikel  >  hujung hadapan web  >  Mengapakah rentetan JavaScript tidak boleh mempunyai sifat dan bagaimana anda boleh mengatasi had ini?

Mengapakah rentetan JavaScript tidak boleh mempunyai sifat dan bagaimana anda boleh mengatasi had ini?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-27 00:17:03459semak imbas

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

Mengapa String JavaScript Tidak Boleh Mempunyai Sifat?

Dalam JavaScript, terdapat lapan jenis primitif: Undefined, Null, Boolean, Number, BigInt, String, Symbol, dan Objek jenis bukan primitif. Nilai primitif, seperti rentetan, tidak boleh mempunyai sifat. Objek, sebaliknya, boleh.

Percubaan untuk menambah sifat pada nilai primitif, seperti rentetan, akan menyebabkan tiada operasi dalam mod longgar atau TypeError dalam mod ketat. Ini kerana JavaScript mentafsir tugasan tersebut sebagai percubaan untuk menetapkan nilai pembolehubah, bukan mencipta sifat baharu.

<code class="js">var test = "test";
test.test = "test inner";
console.log(test); // "test"
console.log(test.test); // undefined</code>

Penyelesaian untuk Isih Tarikh

Walaupun anda tidak boleh menambah sifat pada rentetan , terdapat penyelesaian untuk memudahkan pengisihan tarikh dalam grid anda:

Sifat Aksesor ES5

Sifat Aksesor ES5 memperkenalkan, yang membolehkan anda mentakrifkan fungsi pengambil dan penetap untuk sifat. Anda boleh mentakrifkan sifat pengakses pada prototaip String yang mengembalikan objek tarikh:

<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>

Walau bagaimanapun, mengubah suai prototaip String terbina dalam dianggap sebagai amalan yang lemah.

Tentukan Fungsi Isih

Sebagai alternatif, anda boleh mentakrifkan fungsi pengisihan tersuai yang mengecam rentetan tarikh dan membandingkannya dengan sewajarnya:

<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>

Buat Pemformat Tarikh Tersuai

Anda boleh melanjutkan pembina Tarikh JavaScript dengan fungsi pemformatan tersuai yang mengembalikan perwakilan rentetan mesra diisih:

<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>

Atas ialah kandungan terperinci Mengapakah rentetan JavaScript tidak boleh mempunyai sifat dan bagaimana anda boleh mengatasi had ini?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn