JavaScript中不好的一点是,如果您使用parseInt处理以0开头的数字,则可能会将该数字视为八进制。
i = parseInt(014); // Answer: 12
问:如何重新定义parseInt函数以默认使用基数10?我假设您会使用原型方法。
编辑:
也许我应该这样做:
$.fn.extend({
parseInt:function(X) {
return parseInt(X,10);
}
});
JavaScript中不好的一点是,如果您使用parseInt处理以0开头的数字,则可能会将该数字视为八进制。
i = parseInt(014); // Answer: 12
问:如何重新定义parseInt函数以默认使用基数10?我假设您会使用原型方法。
编辑:
也许我应该这样做:
$.fn.extend({
parseInt:function(X) {
return parseInt(X,10);
}
});
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);
}
===
来更加精确,但是使用 ==
也能正常工作。 - MattparseInt
方法有以下假设来源:
所以你可以采用不要以0开头的解决方案;)
使用ECMA-262(也称为EcmaScript 5,也称为JavaScript版本5)之一的新功能严格模式,使用"use strict"
打开它
当您选择启用严格模式时,规则会更改来源:
唯一获取八进制的方法是将基数参数设置为8。
在撰写本文时,ECMAScript 5的支持并不在所有浏览器中都一致,因此某些浏览器根本不支持它,这意味着该解决方案对他们无用。其他浏览器实现是有问题的,因此即使它支持它,它们也不支持。
下面的图像是IE 10发布预览版与Chrome 19的比较 - 其中IE正确运行,但Chrome不会。
检查您的浏览器的简单方法是转到:http://repl.it/CZO# 如果结果为10, 10, 8, 10, 16,则很好 - 如果不是,则表示您的浏览器存在问题:(
parseInt
在ES5中已经发生了变化,即使没有启用严格模式。 - Wilfred HughesparseInt('014')
,而不是parseInt(014)
。parseInt
(我强烈反对这样做),我猜你可以这样做:(function(_parseInt)
{
parseInt = function(string, radix)
{ return _parseInt(string, radix || 10);
};
})(parseInt);
function createIntParser(radix) {
return function(val) {
return window.parseInt(val, radix);
}
}
decimalParseInt = createIntParser(10);
alert(decimalParseInt("010"));
但我喜欢说得明白。
(但是我喜欢表达得明确。)i = parseInt('014',10);
014
时,它已经表示数字12,因此parseInt
对其无用。
console.log('014===12:', 014===12);
parseInt('014')
而不是parseInt(014)
。 - James M014
是一个八进制数。0x14
是十六进制。 - Marc B014=10x8+4=12
。 - Shiplu Mokaddimvar myParseInt = function (num, radix) { return parseInt(num, radix || 10); };
怎么样?如果将myParseInt
更改为parseInt
,不确定会发生什么。 - powerbuoy