私は文字列/配列を辞書順にソートしていました。
array.sortを使用して "022"を含む文字列をソートしなければならない場合がありました。なぜ私はそれが印刷されているときに「18」に等しいとは分かりません。javascriptのinbuiltソートメソッドを使用して間違った並べ替えの回答につながる先行ゼロ
var l = [022,12];
l.sort();
(2) [12, 18] => output
これの背後にある理由とその修正方法はなんですか?
私は文字列/配列を辞書順にソートしていました。
array.sortを使用して "022"を含む文字列をソートしなければならない場合がありました。なぜ私はそれが印刷されているときに「18」に等しいとは分かりません。javascriptのinbuiltソートメソッドを使用して間違った並べ替えの回答につながる先行ゼロ
var l = [022,12];
l.sort();
(2) [12, 18] => output
これの背後にある理由とその修正方法はなんですか?
これは種類に固有のものではありません。コンソールに022
と入力すると、18が戻ってきます。これは、0239がDecimalLiteral
の代わりにOctalIntegerLiteral
と解釈されているためです。しかし、必ずしもそうではありません。 documentationを見てとる:小数リテラルがゼロで開始することができることが
注(0)別の進数字が続くが、先頭の0の後に、すべての桁が8未満である場合、数として解釈され8進数。これはJavaScriptでスローされません。bug 957513を参照してください。 parseInt()についてのページも参照してください。
EDIT:有数の0を削除し、10進整数として022
を解釈し、あなたがparseInt
を使用してベースを指定することができますするには、次の
parseInt("022", 10);
> 22
リファレンスリンクの速さはどうですか?これまで仕様を読んだことがありますか? –
したがって、parseInt(配列)がこの問題を解決すると言っていますか? –
@HimanshuBhutani編集を確認してください。文字列 "022"を10進数の整数22として解釈するには、基数10を指定する必要があります。 – stybl
022
が生成されるように、私は"use strict";
にお勧め代わり進数の構文エラー:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Deprecated_octal
'022'があります8進数のリテラル== 18桁の小数点以下桁数 – Aprillion