默认parseInt基数为10

时间:2012-02-21 15:17:52

标签: javascript

JavaScript的一个不好的部分是,如果你将parseInt用于以0开头的东西,那么它可以将数字视为八进制。

i = parseInt(014); // Answer: 12

问:如何重新定义parseInt,使其默认为基数为10?我假设你会使用原型方法。

编辑:

也许我应该这样做:

$.fn.extend({
    parseInt:function(X) {
        return parseInt(X,10);
    }
});

6 个答案:

答案 0 :(得分:13)

如果存储对原始parseInt函数的引用,则可以使用自己的实现覆盖它;

(function () {
    var origParseInt = window.parseInt;

    window.parseInt = function (val, radix) {
        if (arguments.length === 1) {
            radix = 10;
        }

        return origParseInt.call(this, val, radix);
    };

}());

但是,强烈建议你不要这样做。修改您不拥有的对象是不好的做法,更不用说更改您不拥有的对象的签名。如果您在八进制上依赖的其他代码是默认代码,会发生什么?

将自己的功能定义为快捷方式会更好 ;

function myParseInt(val, radix) {
    if (typeof radix === "undefined") {
        radix = 10;
    }

    return parseInt(val, radix);
}

答案 1 :(得分:6)

简介

首先,parseInt方法假设以下 source

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

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

解决方案

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

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

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

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

问题

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

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

Chrome 19 versus IE 10 Release Preview

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

答案 2 :(得分:5)

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

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

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

})(parseInt);

答案 3 :(得分:4)

我个人会为此使用部分功能应用程序模式。类似的东西:

function createIntParser(radix) {
    return function(val) {
        return window.parseInt(val, radix);        
    }
}

decimalParseInt = createIntParser(10);

alert(decimalParseInt("010"));​

但我喜欢明确。

答案 4 :(得分:2)

i = parseInt('014',10);

无论如何,当你说014时,它已经意味着数字12,所以parseInt对它没有任何用处。

的javascript:警报(014 === 12);

答案 5 :(得分:1)

parseInt()还有第二个参数:

parseInt(x, [radix])

http://www.javascriptkit.com/jsref/globalfunctions.shtml