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

Mary-Kate Olsen
Lepaskan: 2024-10-27 00:17:03
asal
458 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!