[解決済み] parseInt(8,3) == NaN と parseInt(16,3) == 1 になっているのはなぜですか?
質問
今読んでいる本 これ の中に書かれていることに戸惑いを感じています。 parseInt に基数引数を与える 章
なぜか
parseInt(8, 3)
→
NaN
と
parseInt(16, 3)
→
1
?
8 と 16 は基数 3 ではないので、AFAIK では
parseInt(16, 3)
を返さなければなりません。
NaN
も
解決方法は?
これは、わかっていても、いつもつまずく人がいることです :-) あなたが見ているのは、同じような理由
parseInt("1abc")
は1を返します。
parseInt
は、最初の無効な文字で停止し、その時点で持っているものをすべて返します。もし解析すべき有効な文字がなければ、それは
NaN
.
parseInt(8, 3)
は、パース
"8"
を基数3に変換することに注意してください。
8
を文字列に変換します。
仕様の詳細
). しかし、基数3では、1桁の数字は単に
0
,
1
および
2
. を解析するように要求しているようなものです。
"9"
を8進数で表示します。があったので
いいえ
有効な文字、あなたは
NaN
.
parseInt(16, 3)
をパースするように要求しています。
"16"
を3進数で表したものです。を解析することができるので
1
で停止する。
6
というのは、パースできないからです。そこで
1
.
この質問は多くの注目を集め、検索結果で上位にランクインする可能性があるので、JavaScriptで文字列を数字に変換するオプションの概要と、そのさまざまな特異性と応用を紹介します(SOでの私の別の回答から引用しました)。
-
parseInt(str[, radix])
- 文字列の先頭をできる限り全体の(整数)数に変換し、末尾の余分な文字は無視します。つまりparseInt("10x")
は10
はx
は無視されます。オプションの基数(数字のベース)引数をサポートし、そのためparseInt("15", 16)
は21
(15
16進数で)。基数を指定しない場合は,文字列の先頭が0x
(または0X
この場合、それらはスキップされ、16進数とみなされます。 (で始まる文字列を扱うブラウザがありました。0
を8進数として扱いますが、この動作は指定されたことはありません。 特に禁止されている は、ES5仕様に含まれています)。 戻り値NaN
解析可能な数字が見つからなかった場合。 -
parseFloat(str)
- 様parseInt
しかし、浮動小数点数を扱い、10進数のみをサポートします。ここでも文字列上の余分な文字は無視されますのでparseFloat("10.5x")
は10.5
(そのx
は無視されます)。10進数のみサポートされているためparseFloat("0x15")
は0
(でパースが終了するため)。x
). 戻り値NaN
解析可能な数字がない場合 -
単項目
+
は、例えば+str
- (例:暗黙の変換) を変換します。 全体 文字列を、浮動小数点と JavaScript の標準的な数値表記(数字と小数点=10進数)を使って数値に変換します。0x
プレフィックス = 16進数。0o
prefix = octal [ES2015+] とする。 いくつか の実装では、これを拡張して、先頭の0
を8進数として扱いますが、ストリクトモードでは扱いません)。+"10x"
はNaN
というのもx
は ではない を無視した。+"10"
は10
,+"10.5"
は10.5
,+"0x15"
は21
,+"0o10"
は8
[ES2015+】になります。] ゲタを履かせている。+""
は0
でなくNaN
ということになります。 -
Number(str)
- まさに暗黙の変換のように(例えば、単項の+
ただし、実装によっては速度が低下します。 (関係なさそうだけど)
関連
-
jsを使った簡単な照明スイッチのコード
-
Vueのイベント処理とイベントモディファイアの解説
-
Vueの一般的な組み込みディレクティブの説明
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] let "と "var "の使い分けは?
-
[解決済み] GUID / UUIDの作成方法
-
[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?
-
[解決済み] Node.jsのプログラムにコマンドライン引数を渡すにはどうしたらいいですか?
-
[解決済み] jQueryで要素にスクロールする
-
[解決済み] JSONPとは何か、なぜ作られたのか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
親子コンポーネント通信を解決する3つのVueスロット
-
jsを使った簡単な照明スイッチのコード
-
Vueはランニングライト形式のテキストを水平方向にスクロールする機能を実装している
-
WeChatアプレット用ユニアプリによるグローバルシェアリング
-
JavaScriptの配列共通メソッド解説
-
[解決済み】ローカルファイルを開くことができません - Chrome: ローカルリソースの読み込みが許可されていない
-
[解決済み] TypeError: $.ajax(...) is not a function?
-
[解決済み】「.addEventListener is not a function」なぜこのエラーが発生するのか?
-
JSクリックイベント - Uncaught TypeError: プロパティ 'onclick' に null を設定できません。
-
モジュールのビルドに失敗しました。Error: ENOENT: no such file or directory, scandir 'D:\.... \node_modules