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 には、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 アクセサー プロパティ

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!