1. ホーム
  2. javascript

[解決済み] moment.jsでミュータビリティを回避するには?

2022-07-19 21:18:41

質問

あるオブジェクトの初期値を保存しなければならないのですが、変数が元のオブジェクトと一緒に変化してしまうのを防ぐのに苦労しています。

残念ながら Object.freeze() は動作しません。なぜなら moment.js は Invalid date エラーを返すからです。

どのように解決するのですか?

NPMにMoment.jsのプラグインとして フローズンモーメント - を使うことができます。 moment().freeze() の代わりに Object.freeze(moment()) .

それ以外の場合、バニラ Moment.js は clone メソッドがあり、ミュータビリティの問題を回避するのに役立つはずなので、このようにすることもできます。

var a = moment(),
    b = a.clone(); // or moment(a)

UPDATEです。

この回答を書いてから、2年が経ちました。この間、日付を扱う別のライブラリが表面化し、多くの支持を得ました。 https://date-fns.org/

このライブラリはデフォルトで immutable であり、モジュール化された機能的なアーキテクチャに従っているため、ツリーシェイクやクライアントサイドのバンドルに適していることを意味します。クライアントサイドで Webpack を多用するプロジェクトで、Moment.js のビルドに問題がある場合、あるいは Moment.js のミュータビリティが頭痛の種になっている場合は、Moment.js に date-fns を試してみてください。