2013-06-02 10 views
12

(クロムJSコンソールから異なる結果)両方のでnode.jsのparseIntを使用して奇妙な結果が得られるのはなぜですか?私はちょうどことに気づい

//IN CHROME JS CONSOLE 
parseInt("03010123"); //prints: 301

//IN NODE.JS 
parseInt("03010123"); //prints: 790611 

がV8に基づいているが、なぜ同じ操作異なる結果をもたらします?

+1

http://code.google.com/p/v8/issues/detail?id=1645 –

+0

バージョンは何?私はそれを再現することはできません。 – Blender

+0

@Blender v0.8.18 – renatoargh

答えて

21

parseIntに渡される文字列の先頭に0があり、radixパラメータを省略すると、未定義の動作が発生します。

上記の文字列の基数を表す整数。読者の混乱を避け、予測可能な動作を保証するために、常にこのパラメータを指定してください。基数が指定されていない場合、実装によって異なる結果が生成されます。

ベース10にベース8、および一部の一部のブラウザのデフォルト私はドキュメントがノードについて言うかわからないんだけど、基数8の3010123がベース10

790611あるので、はっきりそれは、ベース8を想定しています

あなたは使いたいでしょう:ノードの

parseInt("03010123", 10); 
+1

thats it!ありがとう。このリンクを参考にして回答を改善してください:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt – renatoargh

+0

@RenatoGama - done - ありがとう。 –

+0

また、代わりにNumber()を使用することもできます。 – Kiddo

関連する問題