我做了类似的东西:
Number.prototype.foo = function () {
//code
}
// Octal number!
(013).foo();
但是在 foo 函数内部检查这个,我得到 11 作为值......怎么了?
我做了类似的东西:
Number.prototype.foo = function () {
//code
}
// Octal number!
(013).foo();
但是在 foo 函数内部检查这个,我得到 11 作为值......怎么了?
你期望会发生什么?
Javascript 将所有以零开头的整数视为八进制 [*],因此 的实际值013
确实是11
(十进制)。该类Number
仅处理值,并且不会知道您最初传入的是八进制常量。
[*] 包含数字 8 或 9 的整数有一个例外 - 因为它们在八进制中是不合法的,即使存在前导零,解析器也会隐式地将它们视为十进制。
这不是真正的问题,因为您可以轻松地将其转换回八进制表示:
var dec = 11;
alert(dec.toString(8)); // returns "13"
数字以十进制格式返回,但据我所知,它的数字运算不会有任何不同。另请注意,提供给 JavaScript 的所有八进制数都将立即以这种方式“转换”:
alert(013); // returns 11
一旦八进制数被解释为数字,它就与十进制数没有什么不同。
013
与 完全相同11
。一旦 JavaScript 看到它是一个数字,它就只是一个数字——它不记得它的“八进制”或“十进制”。