String.toJSON(), JSON.stringify(), JSON.parse() の実装比較一覧

"あa".toJSON() JSON.stringify("あa") JSON.stringify({"あa": null})
Google Chrome6(dev) "あa" ""\u3042a"" "{"\u3042a":null}"
Safari5 not impl ""あa"" "{"あa":null}"
Opera10.60β not impl '"あa"' '{"あa":null}'
Firefox3.6.3 "あa" ""あa"" "{"あa":null}"
IE8 "あa" ""\u3042a"" "{"\u3042a":null}"
IE6, IE7 not impl not impl not impl
JSON.parse('"あa"') JSON.parse('"\u3042a"')
Google Chrome6(dev) "あa" "あa"
Safari5 "あa" "あa"
Opera10.60β "あa" "あa"
Firefox3.6.3 "あa" "あa"
IE6, IE7 not impl not impl


Chrome と IE8 が JSON.stringify()で非ASCII文字をエンティティ化(\uffff)するようです。

おまけ

Firefox限定になりますが、uneval("あa") は ""\u3042a"" になります(id:os0x さんに教えてもらいました)。
uneval() は JSON互換ではなく、他のブラウザにも実装されていないため、なかなか使いどころが無いと思いますが、書き留めておきます。