JavaScriptに迷惑な問題があります。
> parseInt(1 / 0, 19)
> 18
なぜparseInt
関数は戻るの18
ですか?
JavaScriptに迷惑な問題があります。
> parseInt(1 / 0, 19)
> 18
なぜparseInt
関数は戻るの18
ですか?
回答:
の結果は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"
をスキャンして、解析できる部分を見つけ、最初の部分を受け入れた後に停止するI
ことn
です(ベース19の有効な数字ではないため)。
したがって、これはを呼び出した場合と同様に動作し、parseInt("I", 19)
上記の表で10進数の18に変換されます。
parseInt('Infini',24)
。
n
も有効な数字なので、実際にはを使用してしまいparseInt("Infini", 24)
ます。
イベントのシーケンスは次のとおりです。
1/0
評価する Infinity
parseInt
ベース19の18を読んInfinity
で楽しくメモI
parseInt
文字列は変換できないため、残りの文字列は無視されます。どのbaseでも結果が得られます>= 19
が、それより下のbase では得られないことに注意してください。basesの>= 24
場合n
、その時点で有効な数字になるため、より大きな結果が得られます。
parseInt
受け入れられる最大のベースは36です。これは、英語のアルファベットに26文字あるため、指定されたベースの有効な数字のセットとして数字と文字の組み合わせを使用することです。
Infinity
することをお勧めし"Infinity"
ます
上記の回答に追加するには:
parseIntは文字列を数値に解析することを目的としています(手がかりは名前にあります)。あなたの状況では、1/0はすでに数値なので、解析をまったく行いたくないので、奇妙な関数の選択です。数値があり(そうする場合)、それを特定の基数に変換する場合は、代わりに基数を指定してtoStringを使用する必要があります。
var num = 1 / 0;
var numInBase19 = num.toString(19); // returns the string "Infinity"
上記の回答に追加するには
parseInt(1/0,19)
に相当 parseInt("Infinity",19)
ベース19個の数字の中0-9
や A-I
(or a-i)
有効数字です。したがって、「Infinity」からはI
19を基数として10に変換され、18になります。次に、n
19に存在しない次の文字を取得しようとします。つまり、基数19に存在しないため、次の文字を破棄します(文字列を数値に変換するJavaScriptの動作に従って) )
したがって、parseInt("Infinity",19)
OR 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
if
助けになるかもしれません。