JavaScript には、Unknown、Null、Boolean、Number、BigInt、String、Symbol、および非プリミティブ型オブジェクト。文字列などのプリミティブ値はプロパティを持つことができません。一方、オブジェクトは可能です。
文字列などのプリミティブ値にプロパティを追加しようとすると、ルーズ モードでは何も実行されず、ストリクト モードでは TypeError が発生します。これは、JavaScript がそのような代入を、新しいプロパティの作成ではなく、変数の値の設定を試みるものとして解釈するためです。
<code class="js">var test = "test"; test.test = "test inner"; console.log(test); // "test" console.log(test.test); // undefined</code>
一方、文字列にプロパティを追加することはできません。
ES5 では、プロパティのゲッター関数とセッター関数を定義できるアクセサー プロパティが導入されました。日付オブジェクトを返す 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 Date コンストラクターを拡張することもできます。ソートしやすい文字列表現を返すカスタム書式設定関数を使用します:
<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 中国語 Web サイトの他の関連記事を参照してください。