JavaScript的一个不好的部分是,如果你将parseInt用于以0开头的东西,那么它可以将数字看作八进制.
i = parseInt(014); // Answer: 12
Run Code Online (Sandbox Code Playgroud)
问:如何重新定义parseInt以使其默认为基数10?我假设你会使用原型方法.
编辑:
也许我应该这样做:
$.fn.extend({
parseInt:function(X) {
return parseInt(X,10);
}
});
Run Code Online (Sandbox Code Playgroud)
Mat*_*att 13
如果存储对原始parseInt函数的引用,则可以使用自己的实现覆盖它;
(function () {
var origParseInt = window.parseInt;
window.parseInt = function (val, radix) {
if (arguments.length === 1) {
radix = 10;
}
return origParseInt.call(this, val, radix);
};
}());
Run Code Online (Sandbox Code Playgroud)
但是,我强烈建议你不要这样做.修改您不拥有的对象是不好的做法,更不用说更改您不拥有的对象的签名了.如果您依赖于八进制的其他代码是默认代码会发生什么?
这将是很多更好地定义自己的功能的快捷方式;
function myParseInt(val, radix) {
if (typeof radix === "undefined") {
radix = 10;
}
return parseInt(val, radix);
}
Run Code Online (Sandbox Code Playgroud)
首先,该parseInt方法假定以下来源:
所以你可以选择解决方案,永远不要从0开始;)
使用ECMA-262(又名EcmaScript 5,又名JavaScript版本5),其中一项新功能是严格模式,您可以使用 "use strict"
当您选择加入严格模式时,规则会更改源:
获得八进制的唯一方法是将radix参数设置为8.
在撰写本文时,ECMAScript 5的支持在所有浏览器中并不一致,因此某些浏览器根本不支持它,这意味着该解决方案对它们没有用处.其他浏览器实现都被破坏了,所以即使宣称它支持它,它们也不会.
下图是IE 10发布预览与Chrome 19的比较 - IE正确运行但Chrome没有.

检查浏览器的简单方法是访问:http://repl.it/CZO# 你应该得到10,10,8,10,16,如果这么好 - 如果不是你的浏览器坏了: (
我认为你的意思是parseInt('014'),而不是parseInt(014).
如果你真的想parseInt用你自己的功能替换(我强烈反对这一点),我想你可以用以下的东西来做:
(function(_parseInt)
{
parseInt = function(string, radix)
{ return _parseInt(string, radix || 10);
};
})(parseInt);
Run Code Online (Sandbox Code Playgroud)