从 moment.js 文档
时刻().toJSON(); 将对象序列化为 JSON 时,如果有 Moment 对象,则表示为 ISO8601 字符串。
JSON.stringify({
postDate : moment()
}); // {"postDate":"2013-02-04T22:44:30.652Z"}
我不明白 moment 对象如何检测在其上运行的函数。它如何在序列化时返回不同的值,以及简单地存储在对象中或作为字符串返回时?
时刻().toJSON(); 将对象序列化为 JSON 时,如果有 Moment 对象,则表示为 ISO8601 字符串。
JSON.stringify({
postDate : moment()
}); // {"postDate":"2013-02-04T22:44:30.652Z"}
我不明白 moment 对象如何检测在其上运行的函数。它如何在序列化时返回不同的值,以及简单地存储在对象中或作为字符串返回时?
使用 stringify 时,对象可以定义它的表示方式,如本文档所示:
来自https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/JSON/stringify
toJSON 行为
如果被字符串化的对象有一个名为 toJSON 的属性,其值为一个函数,则 toJSON 方法自定义 JSON 字符串化行为:而不是被序列化的对象,调用时 toJSON 方法返回的值将被序列化。
例如:
var x = {
foo: 'foo',
toJSON: function () {
return 'bar';
}
};
var json = JSON.stringify({x: x});
//json will be the string '{"x":"bar"}'.
moment.js 的文档(见此处:https ://raw.github.com/timrwood/moment/2.0.0/moment.js )表明这确实是受支持的,这里是确切的代码
toJSON : function () {
return moment.utc(this).format('YYYY-MM-DD[T]HH:mm:ss.SSS[Z]');
}
所以,这就是它在被字符串化时如何知道如何表示自己的方式。