20

を使用して 10 進数を 10 を超える基数に変換する.toString(base)と、常に小文字の文字列が得られるようです。これに頼ることができますか?私のアプリケーションでは変換が必要ですが、大文字の文字列は正しいでしょう。

これを定義する仕様の部分を参照するための追加のクレジット (私が調べたが見つかりませんでした) と、反例 (大文字を返すブラウザー) のための追加のクレジット。

例:

(12648430).toString(16) // returns: "c0ffee". Not "C0FFEE"
4

2 に答える 2

20

おそらく。これは、第 5 版仕様の §15.7.4.2 で定義されています

ToInteger( radix ) が 2 から 36 までの整数でない場合は、RangeError例外をスローします。ToInteger( radix ) が 2 ~ 36 の整数で、10 ではない場合、結果は、指定された基数を使用したこの Number 値の文字列表現になります。文字 a ~ z は、値が 10 ~ 35の数字に使用されます。基数が 10 でない場合、正確なアルゴリズムは実装に依存しますが、アルゴリズムは 9.8.1 で指定されたものの一般化である必要があります。

(私の強調)

しかし、第 3 版の仕様 (1999 年以降) では、それは述べられていませんでした。

radix が 2 から 36 までの整数で 10 以外の場合、結果は文字列であり、その選択は実装に依存します。

...そのため、大文字 (またはまったく別のもの) を使用するエンジンを実際に見つけることができる可能性があります。そのような動作を持たない重要な既知の実装があった場合、彼らは通常、そのようなことを仕様に追加しませんでした。現在のバージョンの Chrome、Firefox、Opera、IE8、さらには IE6 でも小文字を使用します。したがって、おそらくかなり一貫していると思います。

于 2013-11-03T10:27:22.250 に答える
1

(12648430).toString(16) は常に「c0ffee」を返します。「C0FFEE」ではなく、いくつかのブラウザで確認したところ、確認が見つかりました:

Number オブジェクトは Object オブジェクトの toString() メソッドをオーバーライドします。
Object.prototype.toString() を継承しません。Number オブジェクトの場合、 toString() メソッドは、指定された基数でオブジェクトの文字列表現を返します。


toString() メソッドは最初の引数を解析し、指定された基数 (基数) で文字列表現を返そうとします。10 を超える基数の場合、アルファベットの文字は 9 より大きい数字を示します。たとえば、16 進数 (基数 16) の場合、a から f が使用されます。

「16 進数 (基数 16) の場合、a から f が使用されます」.

リファレンスを参照してください: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toString .

于 2013-11-03T10:35:52.620 に答える