为什么JSON.stringify()接受Date对象?

至少在Firefox中,您可以将Date对象串联起来:

>>> JSON.stringify({'now': new Date()})
'{"now":"2012-04-23T18:44:05.600Z"}'

这是有效的,因为(在Firefox中) Date包含一个由其JSON序列化程序使用的toJSON方法。 然而,这不是JSON标准的一部分,所以我想知道为什么这个方法存在,或者为什么内置的JSON序列化程序检查这种方法。 由于它不是标准化的,如果内建序列化程序理解它并且使用自定义标记(如json2.js),则无法首先进行安全测试,


这是有效的,因为它在规范中被指定为不太清楚的事情。 首先,您需要深入剖析用于将值转换为字符串表示形式的抽象操作Str的15.12.3节。 基本上,如果输入是一个对象,则规范说要检查名为toJSON的可调用值的存在。 想想这个像Java或C#中的接口。

interface IAmJSON 
{
    string toJSON(string key);
}

这是来自规范的确切文本。

2.  If Type(value) is Object, then 
    a.  Let toJSON be the result of calling the [[Get]] internal method of  value with argument "toJSON". 
    b.  If IsCallable(toJSON) is true 
        i.  Let value be the result of calling the [[Call]] internal method of  toJSON passing value as the this value and with an argument list consisting of key. 

最后,日期对象toJSON15.9.5.44定义。

链接地址: http://www.djcxy.com/p/8171.html

上一篇: Why does JSON.stringify() accept Date objects?

下一篇: Format dates coming from Restful Service in Javascript