0

我做了类似的东西:

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

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

但是在 foo 函数内部检查这个,我得到 11 作为值......怎么了?

4

3 回答 3

1

你期望会发生什么?

Javascript 将所有以零开头的整数视为八进制 [*],因此 的实际值013确实是11(十进制)。该类Number仅处理值,并且不会知道您最初传入的是八进制常量。

[*] 包含数字 8 或 9 的整数有一个例外 - 因为它们在八进制中是不合法的,即使存在前导零,解析器也会隐式地将它们视为十进制。

于 2011-06-23T13:47:13.700 回答
0

这不是真正的问题,因为您可以轻松地将其转换回八进制表示:

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

数字以十进制格式返回,但据我所知,它的数字运算不会有任何不同。另请注意,提供给 JavaScript 的所有八进制数都将立即以这种方式“转换”:

alert(013); // returns 11
于 2011-06-23T13:52:39.290 回答
0

一旦八进制数被解释为数字,它就与十进制数没有什么不同。

013与 完全相同11。一旦 JavaScript 看到它是一个数字,它就只是一个数字——它不记得它的“八进制”或“十进制”。

于 2011-06-23T13:48:57.327 回答