【Javascript】0で割ると?
0で除算するとどうなるかはプログラム言語によってさまざま。
例えばphpでは”php -r ’10/0;'” → Warning(警告)が発生。
MySQLでは”select 10/0″ → NULL(極力エラーで止めない方針だからか)。
PostgreSQLではエラーがでてSQLを実行できない。
ではJavascriptでは?
- … 10 ÷ 0 → Infinity(正の無限大)
- … 0 ÷ 0 → NaN(Not-A-Number、非数)
- … -10 ÷ 0 → -Infinity(負の無限大)
それぞれ、JavaScriptやECMA-262で定義されているもの。
各ブラウザの勝手な仕様ではない。
仕様によると、こうなる。
- … Infinity × Infinity → Infinity
- … 10 ÷ Infinity → 0
- … 10 + Infinity → Infinity
- … 10 - Infinity → -Infinity
Infinity を掛けたものは全て Infinity であり、Infinity で割ったものは全て 0 。
なお、InfinityはNaNではない。それぞれ別のもの。
- … InfinityはNaN(非数)ですか? → false
- … Infinity == Infinity ですか? → true
- … Infinity > 10000 ですか?→ 比較も可能
- … 1.79E+310 = 1790000……(311桁)を表示してみてよ → オーバーフロー → Infinity
- … 2の1023乗までは大丈夫なんだけど、2の1024乗 → オーバーフロー → Infinity
JavascriptはオーバーフローしてもInfinityにして処理を続けてくれる。まともな数値ではなくなるが、エラーで止まらない。
Infinityは、NaNやundefinedのような特殊な値と違い、通常の数値と同じように比較、演算できる。
スクリプトの処理中に0で割り算しちゃったらどうするんですか
Javascriptだと、何ごともなかったかのように処理が進みますね。。。
エラーで停止するわけではないし、例外も投げないということと、無限大(Infinity、-Infinity)か非数(NaN)になるのを知っていれば何とかなるのでは。
ここに書いてある
Infinityプロパティ
https://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/Global_Properties/Infinity
参考
Numberオブジェクト
https://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/Global_Objects/Number
そのほかのグローバルプロパティ
https://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/Global_Properties
コメント