12

少なくとも Firefox では、Date オブジェクトを文字列化できます。

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

これが機能するのは、(Firefox では) JSON シリアライザーによって使用されるメソッドがDate含まれているためです。toJSONただし、これは JSON 標準の一部ではないため、このメソッドが存在する理由、または組み込みの JSON シリアライザーがそのようなメソッドをチェックする理由が不思議です。標準化されていないため、組み込みのシリアライザーがそれを理解しているかどうかを最初にテストせずに安全に使用することはできません。

4

1 に答える 1

12

これは、仕様内のあまり明確でない事項で指定されているために機能します。最初に、値を文字列表現に変換するために使用される抽象演算Strの説明のセクション15.12.3を掘り下げる必要があります。基本的に、入力がオブジェクトである場合、仕様では、という名前の呼び出し可能な値の存在を確認するように指示されています。これをJavaまたはC#のインターフェースのように考えてください。toJSON

interface IAmJSON 
{
    string toJSON(string key);
}

これは仕様からの正確なテキストです。

2. Type(value)がObjectの場合、
    a。toJSONを、引数「toJSON」を使用して値の[[Get]]内部メソッドを呼び出した結果とします。
    b。IsCallable(toJSON)がtrueの場合
        私。toJSONの[[Call]]内部メソッドを呼び出した結果をvalueとし、この値として値を渡し、キーで構成される引数リストを使用します。

最後に、日付オブジェクトはtoJSONセクション15.9.5.44で定義されています。

于 2012-04-23T19:08:02.050 に答える