我如何在moment.js中解决可变性问题?

She*_*618 96 javascript object immutability mutability momentjs

我遇到了一个问题,我必须存储一个时刻对象的初始值,但是我遇到了一些问题,我阻止了我的变量与原始对象一起变化.

不幸的是,Object.freeze()不起作用,因为当我尝试格式化时,moment.js返回"无效日期"错误.

raz*_*ard 158

在NPM上有一个叫做冻结时刻的Moment.js插件- 你可以moment().freeze()代替使用它Object.freeze(moment()).

否则,vanilla Moment.js有一个clone方法可以帮助你避免可变性问题,所以你可以这样做:

var a = moment(),
    b = a.clone(); // or moment(a)
Run Code Online (Sandbox Code Playgroud)

更新:

我写这个答案已经两年了.在这个时候,另一个处理日期的图书馆浮出水面并获得了很大的吸引力:https://date-fns.org/

这个库默认是不可变的,遵循模块化的功能架构,这意味着它更适合树摇动和客户端捆绑.如果你正在开发一个在客户端广泛使用Webpack的项目,并且发现Moment.js给你的构建带来麻烦,或者即使Moment.js的可变性让你很头疼,那么你应该date-fns试一试.

  • 你可以操作存储的`moment`变量而不需要改变它:只需像这样使用clone():`zz = moment(); zz.clone().add(3,'h').toISOString();` (22认同)
  • 谁在2018年编写JS可变代码? (4认同)
  • 请注意,date-fns的时区支持非常差,并且不支持UTC日期。 (4认同)
  • 我已经使用了一段时间“ date-fns”,但是从那以后不得不使用Moment和boy跳入遗留代码,这篇文章使我免于跳出窗口。 (2认同)