863

JavaScriptに厄介な問題があります。

> parseInt(1 / 0, 19)
> 18

parseInt関数が を返すのはなぜ18ですか?

4

4 に答える 4

1305

の結果は1/0ですInfinity

parseInt最初の引数を文字列として扱います。これは、最初にInfinity.toString()呼び出され、文字列を生成することを意味します"Infinity""Infinity"したがって、 19を底として10進数に変換するように要求した場合と同じように機能します。

基数19の数字とその10進値は次のとおりです。

Base 19   Base 10 (decimal)
---------------------------
   0            0
   1            1
   2            2
   3            3
   4            4
   5            5
   6            6
   7            7
   8            8
   9            9
   a            10
   b            11
   c            12
   d            13
   e            14
   f            15
   g            16
   h            17
   i            18

次に起こることはparseInt、入力をスキャンして"Infinity"解析できる部分を見つけ、最初の部分を受け入れた後に停止することです(ベース19の有効な数字ではないIため)。n

したがって、を呼び出したかのように動作しparseInt("I", 19)、上記の表で10進数の18に変換されます。

于 2012-07-05T08:41:49.153 に答える
229

イベントのシーケンスは次のとおりです。

  • 1/0に評価されますInfinity
  • parseInt19 進法で 18 であることを読みInfinity、喜んでメモします。I
  • parseInt変換できないため、文字列の残りの部分は無視されます。

base の結果は得られますが>= 19、それより下の base の結果は得られないことに注意してください。basesの場合、その時点で有効な数字になる>= 24ため、より大きな結果が得られます。n

于 2012-07-05T08:43:38.050 に答える
39

上記の回答に追加するには:

parseInt は、文字列を数値に解析することを目的としています (手がかりは名前にあります)。あなたの状況では、 1/0 はすでに数値であるため、解析をまったく実行したくないため、関数の選択は奇妙です。数値を持っていて、それを特定の基数に変換したい場合は、代わりに基数を指定して toString を使用する必要があります。

var num = 1 / 0;
var numInBase19 = num.toString(19); // returns the string "Infinity"
于 2012-07-10T15:54:51.230 に答える
14

上記の回答に追加するには

parseInt(1/0,19)と同等ですparseInt("Infinity",19)

基数 19 の範囲内で0-9あり A-I (or a-i)、有効な数値です。したがって、「無限大」からI基数 19 を取得し、基数 10 に変換して 18 になります。次に、基数 19 に存在しない次の文字を取得しようとします。次の文字nを破棄します (文字列を数値に変換する JavaScript の動作に従って) )

したがって、parseInt("Infinity",19)OR parseInt("I",19)ORを記述した場合parseInt("i",19)、結果は同じになります18

さて、あなたが書くparseInt("I0",19)と、結果は次のようになり342 ますI X 19 (the base)^1 + 0 X 19^0 = 18 X 19^1 + 0 X 19^0= 18 X 19 + 0 X 1 =342

同様にparseInt("I11",19)6518

すなわち

  18 X 19^2  +   1 X 19^1   +  1 X 19^0
= 18 X 19^2  +   1 X 19^1   +  1 X 19^0
= 18 X 361   +   1 X 19     +  1 X 1
= 6498  +  19  +  1
= 6518
于 2012-07-17T08:01:49.687 に答える