将八进制值传递给新的数字函数

时间:2011-06-23 13:43:30

标签: javascript numbers prototype-programming octal

我做了类似的事情:

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

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

但是检查脚部功能的内部,我得到了11值......出了什么问题?

3 个答案:

答案 0 :(得分:1)

您期望发生什么?

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

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

答案 1 :(得分:0)

一旦将八进制数解释为数字,八进制数与十进制数没有区别。

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

答案 2 :(得分:0)

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

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

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

alert(013); // returns 11