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

Passing octal value to new number function

本文关键字:数字 函数 新数字 八进制 值传      更新时间:2023-09-26

我做了这样的东西:

Number.prototype.foo = function () {
    //code
}
// Octal number!
(013).foo();

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

你期望会发生什么?

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

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

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

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

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

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

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

alert(013); // returns 11