JavaScript の算術演算子と数値変換

valueOf と ToNumber とあとついでに parseInt のことについて適当に調べてそれを垂れ流したのでまとめてみた。 調べてなくてあまり確証のないところは”(たぶん”とかつけているけれど、それ以外は一応調べたつもりなのでだいたい合ってるハズ。 但しブラウザ対応までは調べていないので、悪しからず。
4
Tomoki UDA @t_uda

((parseFloat を使えよ、という話ではあるかもしれないが)) /[Mm]ath/

2010-12-21 01:17:41
Tomoki UDA @t_uda

一方、仕様書の数値変換関数である ToNumber では、科学表記に対応している。こちらには 8 進法表記に関する規定がないので、 parseInt の場合の心配は不要である。 #JavaScript /[Mm]ath/

2010-12-21 01:23:52
Tomoki UDA @t_uda

例えば、式 "1e2" - "2e1" は、減算演算子の評価時に被演算項に対して ToNumber が呼び出されるので、 98 となる。 #JavaScript /[Mm]ath/

2010-12-21 01:29:17
Tomoki UDA @t_uda

ToNumber の規定で受け取る数値表記法は、ECMAScript で規定されている数値リテラルのそれの定義に近い。なので、そのような数値変換を期待するのであれば +operand を使うと良いかもしれない。 #JavaScript /[Mm]ath/

2010-12-21 01:35:13
Tomoki UDA @t_uda

まとめ的何か。文字列->数値変換は、[a] +x , [b] parseInt(x) / parseFloat(x) , [c] new Number(x) の 3 つの方法が考えられるが、それぞれ異なるので上手く使い分けたい。 #JavaScript /[Mm]ath/

2010-12-21 01:40:48
Tomoki UDA @t_uda

ちなみに、[c] について。ほとんど [a] と同じで内部で ToNumber が呼び出されるが、結果が Number オブジェクト(primitive)になる。あと new は使いたくないよね。 #JavaScript /[Mm]ath/

2010-12-21 01:43:19
Tomoki UDA @t_uda

非primitiveと言いたかった QT @t_uda: ちなみに、[c] について。ほとんど [a] と同じで内部で ToNumber が呼び出されるが、結果が Number オブジェクト(primitive)になる。あと new は使いたくないよね。

2010-12-21 02:11:19
Tomoki UDA @t_uda

Cf. [2] "JavaScriptのToNumberとparseInt/parseFloatの仕様と実装の違い" http://d.hatena.ne.jp/mindcat/20091012/1255354167 #JavaScript /[Mm]ath/

2010-12-21 02:05:29