- - PR -
parseIntとNumber (JavaScript)
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-07-21 18:38
#JavaScriptの投稿はこちらでよいのでしょうか?
いま、文字列を数値に変換しようと思っています。 変換のために、parseInt()を使って以下のように記述しました。 var num = parseInt( str ); これで一件うまくいっているように見えたのですが、 strに"0"で始まる値を入力されると8進数として解釈されてしまいました。 #これはこれで納得できます。 そこで、試しにNumberオブジェクト(関数?)を使って以下のように記述してみました。 var num = Number( str ); すると、"0"で始まる文字列でも意図した10進数になることが確認できました。 お聞きしたいこと ・"0"で始まる文字列を数値に変換する際にparseInt()とNumber()の挙動はなぜ違うのか? ・Number()以外に何かよい方法は無いか? 以上です。 [ メッセージ編集済み 編集者: もなむ 編集日時 2004-07-21 18:47 ] | ||||||||
|
投稿日時: 2004-07-21 21:52
parseInt及びNumberを仕様書(邦訳ですが)で調べてみました。
Global::parseInt (string , radix) http://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/15-1_Global_Object.html#section-15.1.2.2 関数として呼ばれる Number コンストラクタ http://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/15-7_Number_Objects.html#section-15.7.1 String 型に適用される ToNumber http://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/9_Type_Conversion.html#section-9.3.1 > ・"0"で始まる文字列を数値に変換する際にparseInt()とNumber()の挙動はなぜ違うのか? リンク先を参照頂ければ分かりますが、parseIntとNumberでは文字列を数値に変換するロジックが違います。 # 「なぜ違うのか?」という問いの答えになってるでしょうか? 因みに8進数として解釈するのはIEでの実装です。 手元のOpera7.52では10進数として解釈しますし、仕様的にも10進数として解釈することが推奨されています。 > ・Number()以外に何かよい方法は無いか? 「よい方法」というのがどのような観点からか分かりませんが、 parseIntの第2引数に10を指定するのは如何でしょう? また、値から0を引くという方法もあるようです。 http://tohoho.wakusei.ne.jp/js/builtin.htm#toNumber | ||||||||
|
投稿日時: 2004-07-22 10:29
ECMAScriptの仕様書を調べるのを忘れていました。
なるほど。ブラウザによる挙動の違いが有るのですね。 ということは、第2引数無しのparseInt()を使用するのは危険ですね。 結論としては、明示的に基数を指定できるparseInt()を使おうと思います。 ありがとうございました。 |
1