1

JavaScript 関数に数値を渡そうとしていますが、実際には間違った値が渡されています。ここにコード全体を示します。

<html>
<head>
<script type="text/javascript">
function test(num)
{
/*It should alert as 01004 or 1004 but to my surprise it's alerting as 516!*/
alert(num);
}
</script>
</head>
<body>
<a href="javascript:test(01004);">Test it!</a>
</body>
</html>

上記のコードでは、01004 の代わりに 10040 として渡すと、アラート ボックスに正しい値が表示されます。

この奇妙な事件について何か考えはありますか?

前もって感謝します。

4

4 に答える 4

10

ゼロで始まる数値リテラルは 8 進数として解釈されるため、01004を書き込むことは516 を書き込むこととまったく同じです。

関数内で parseInt を使用して8進数値を10進数に変換することを提案する他のいくつかの回答。

数値 516 が関数に渡されるため、これは役に立ちません。parseInt に基数 10 の解釈を返すように依頼すると、516 が返されます。

これを修正するには、先頭のゼロを削除するか、ゼロが必要な場合は数値ではなく文字列リテラルにして、関数内で parseInt(num, 10) を使用します。

于 2009-01-12T09:46:56.517 に答える
6

先頭のゼロは、おそらく数値が 8 進数であると思わせています。

更新:今朝、私の心を目覚めさせてくれた@Paul Dixonに感謝します。01004はリテラルであるため、事後解析 (つまり、parseInt) によって数値の基数が更新されることはありません。0コードを作成するには、コードの先頭を削除するか1004(最も簡単な解決策)、送信する前にリテラルを引用符で囲んで文字列にする必要がありますparseInt(理由はわかりませんが、これはより多くの作業です)。

于 2009-01-12T09:30:28.187 に答える
1

おめでとうございます。あなたは、B (つまり C) から派生した言語で 8 進リテラルにつまずいた 100 万人目の顧客です。

あなたの賞品は、ケン・トンプソンの家の外で熊手のパレードをリードすることです.

于 2009-01-12T11:31:06.230 に答える
0

番号を引用 -> '01004'

編集: parseInt('01004', 10) が正常に動作することがわかります... parseInt(01004, 10) が機能しない理由が本当にわかりません

EDIT2: OK、ポール・ディクソンに感謝

于 2009-01-12T09:38:48.013 に答える