在 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 引入了存取器屬性,它允許您定義屬性的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中文網其他相關文章!