0

私は次のようなものを作りました:

Number.prototype.foo = function () {
    //code
}

// Octal number!
(013).foo();

しかし、これをfoo関数の内部で調べると、値として11が得られます...何が問題なのですか?

4

3 に答える 3

1

何が起こると思っていましたか?

Javascript は、ゼロで始まるすべての整数を 8 進数 [*] として扱うため、実際の値01311(10 進数) です。このNumberクラスは値のみを扱い、最初に 8 進定数を渡したことがわかりません。

[*] 数字 8 または 9 を含む整数には例外があります。これらは 8 進数では正しくないため、パーサーは先行ゼロが存在する場合でもそれらを暗黙的に 10 進数として扱います。

于 2011-06-23T13:47:13.700 に答える
0

8 進数は、数値として解釈されると 10 進数と変わりません。

013とまったく同じ11です。JavaScript は、それが数値であることを認識すると、それは単なる数値であり、「8 進数」または「10 進数」を記憶していません。

于 2011-06-23T13:48:57.327 に答える
0

簡単に 8 進表現に戻すことができるので、これは実際には問題ではありません。

var dec = 11;
alert(dec.toString(8)); // returns "13"

数値は 10 進数形式で返されますが、その数値演算は私の知る限り違いはありません。また、JavaScript に提供されたすべての8 進数は、この方法で即座に「変換」されることにも注意してください。

alert(013); // returns 11
于 2011-06-23T13:52:39.290 に答える