默认parseInt基数为10

Phi*_*enn 5 javascript

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)

  • @Pedro:Crockford是一个迂腐的%*£^.您可以使用`===`来更精确,但它可以与`==`一起使用. (2认同)

Rob*_*ean 6

介绍

首先,该parseInt方法假定以下来源:

  • 如果它以0x开头 - 则为十六进制.
  • 如果它从0开始 - 那么它是八进制
  • 否则它是十进制的

所以你可以选择解决方案,永远不要从0开始;)

使用ECMA-262(又名EcmaScript 5,又名JavaScript版本5),其中一项新功能是严格模式,您可以使用 "use strict"

当您选择加入严格模式时,规则会更改:

  • 如果它以0x开头 - 则为十六进制
  • 否则它是十进制的

获得八进制的唯一方法是将radix参数设置为8.

问题

在撰写本文时,ECMAScript 5的支持在所有浏览器中并不一致,因此某些浏览器根本不支持它,这意味着该解决方案对它们没有用处.其他浏览器实现都被破坏了,所以即使宣称它支持它,它们也不会.

下图是IE 10发布预览与Chrome 19的比较 - IE正确运行但Chrome没有.

Chrome 19与IE 10 Release Preview相比

检查浏览器的简单方法是访问:http://repl.it/CZO# 你应该得到10,10,8,10,16,如果这么好 - 如果不是你的浏览器坏了: (


Jam*_*lin 5

我认为你的意思是parseInt('014'),而不是parseInt(014).

如果你真的想parseInt用你自己的功能替换(我强烈反对这一点),我想你可以用以下的东西来做:

(function(_parseInt)
{   
    parseInt = function(string, radix)
    {    return _parseInt(string, radix || 10);
    };

})(parseInt);
Run Code Online (Sandbox Code Playgroud)