備忘録: parseIntの罠

| コメント(0) | トラックバック(0)
こんな単純な関数にハマってしまった・・・忘れないようにメモメモ。
意外と気づかずに使っている人は多いんじゃなかろうか。
(たぶん、目立った問題は起きないんだろうなぁ・・・)

間違いがありましたらご指摘を。


ポイント:
JavaScript組み込み関数parseInt(string,radix)は、radix省略時はstringの内容により
radixを決定する。(しかも実装によって動作が変わる可能性がある。)
10進で解析したいときはparseInt(string,10)とすべき。

詳細:
parseInt関数を使ってプログラムを書いていると、radix省略時はradix=10として
解析しているように見えるが、ECMAScript Specにはradix省略時の動作として、
こんなことが書いてある。

If the length of S is at least 1 and the first character of S is "0", then at the implementation's
discretion either let R = 8 or leave R unchanged.

つまり、実装によっては"08"のような数字を与えると8進数扱いで解析をする可能性があると
いうこと。'8'は8進数の構成文字としてありえないので、そこで解析終了。結果は0になってしまう。

日付の処理をしていて、「1986/10/08」とかしたときになぜか「1986,10,0」と解析されちゃって
勘違いに気づいた。
日付とか、ゼロでフォーマットされる文字列を使っている場合は意外に多いので、
ハマってしまうことがあるのでは・・・?


ということで。

トラックバック(0)

トラックバックURL: http://yzwlab.net/mt/mt-tb.cgi/410

コメントする

このブログ記事について

このページは、yacchinが2009年4月 6日 13:42に書いたブログ記事です。

ひとつ前のブログ記事は「備忘録: jQueryでのサイズ計算」です。

次のブログ記事は「らぼ」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

カテゴリ

ウェブページ

OpenID対応しています OpenIDについて
Powered by Movable Type 5.14-en