首頁 > web前端 > js教程 > 主體

為什麼 JavaScript 字串不能有屬性以及如何解決這個限制?

Mary-Kate Olsen
發布: 2024-10-27 00:17:03
原創
458 人瀏覽過

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

為什麼 JavaScript 字串不能有屬性?

在 JavaScript 中,有八種基本型別:Undefined、Null、Boolean、Number、BigInt、String、Symbol、和非原始型別 Object。原始值(例如字串)不能具有屬性。另一方面,對象可以。

嘗試將屬性新增至原始值(例如字串)將導致鬆散模式下的無操作或嚴格模式下的 TypeError。這是因為 JavaScript 將此類賦值解釋為嘗試設定變數的值,而不是建立新屬性。

<code class="js">var test = "test";
test.test = "test inner";
console.log(test); // "test"
console.log(test.test); // undefined</code>
登入後複製

日期排序的解決方法

雖然您無法向字串添加屬性,有一些解決方法可以促進網格中的日期排序:

ES5 訪問器屬性

ES5 引入了存取器屬性,它允許您定義屬性的getter 和setter 函數。您可以在傳回日期物件的 String 原型上定義一個存取器屬性:

<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>
登入後複製

但是,修改內建 String 原型被認為是不好的做法。

定義排序函數

或者,您可以定義一個自訂排序函數來識別日期字串並相應地比較它們:

<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>
登入後複製

建立自訂日期格式化程式

您可以擴充JavaScript 日期建構函式使用自訂格式化函數傳回排序友善的字串表示形式:

<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>
登入後複製

以上是為什麼 JavaScript 字串不能有屬性以及如何解決這個限制?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!