6

を使用して2つの文字列値を変換および比較しています

if (parseInt(x)!=parseInt(y)) {

問題は、値がx="9"でありy="09"、テストが を返す場合ですfalse

どうすればこれを修正できますか?

4

2 に答える 2

16

これを使って :

if(parseInt(x, 10)!=parseInt(y, 10))

基数を正確に指定しないと、「09」は 8 進数として解析されます (これは 0 になります)。

parseInt に関する MDN ドキュメント

8 進表現を扱うときは、この解釈に頼るべきではないことに注意してください。

ECMAScript 5 は 8 進数の解釈を削除します

関数 parseInt の ECMAScript 5 仕様では、0 文字で始まる文字列を 8 進値として処理する実装が許可されなくなりました。ECMAScript 5 は次のように述べています。

parseInt 関数は、指定された基数に従って文字列引数の内容を解釈することによって決定される整数値を生成します。文字列の先頭の空白は無視されます。基数が未定義または 0 の場合、数値が文字ペア 0x または 0X で始まる場合を除いて、10 と見なされます。この場合、基数は 16 と見なされます。radix が 16 の場合、オプションで number を文字ペア 0x または 0X で開始することもできます。

これは ECMAScript 3 とは異なります。ECMAScript 3 は 8 進数の解釈を推奨しませんでしたが、許可していました。

多くの実装では 2011 年の時点でこの動作が採用されておらず、古いブラウザーをサポートする必要があるため、常に基数を指定してください。

簡単に:

常に基数を指定する

于 2012-09-26T09:19:23.243 に答える
3

基数を明示的に 10 に設定する必要があります。それ以外の場合は、基数が 8 であると想定されます (javascript の悪い部分)。

parseInt(x,10)

http://www.w3schools.com/jsref/jsref_parseint.asp

文字列が「0」で始まる場合、基数は 8 (8 進数) です。この機能は非推奨です

于 2012-09-26T09:22:52.383 に答える