自分の備忘録がてら。
[JSON.stringify()]はObjectからJSON文字列を生成する関数だが、結果で一部正確に反映されないものが存在する。
そのうちの一つがInfinityで∞(無限)という意味だ。
JSON文字列上、∞は表現できないためにnullになってしまう。
(尚、InfinityにはNumber.POSITIVE_INFINITYとNumber.NEGATIVE_INFINITYが存在し、単にInfinityとした場合はNumber.POSITIVE_INFINITYと同義になる)
例: コンソールで実行1
> JSON.stringify(Infinity);
"null"
> JSON.stringify(Number.POSITIVE_INFINITY);
"null"
> JSON.stringify(Number.NEGATIVE_INFINITY);
"null"
通常Infinityをそのまま使用する様なプログラムを組むことはないだろうが、JavaScriptで0除算を行った場合に結果として入ってくるので注意が必要。
例: コンソールで実行2
> 128 / 0;
Infinity
つまり何らかの計算結果をオブジェクトの変数へ登録する際にInfinityを考慮せず、そのままJSON文字列化した場合にはnullとして出力されてしまう。
例: コンソールで実行3
JSON.stringify({"hoge": 128 / 0});
> "{"hoge":null}"