Javascript 默认的parseInt基数为10
JavaScript的一个不好的部分是,如果使用以0开头的parseInt,那么它可能会将数字视为八进制Javascript 默认的parseInt基数为10,javascript,Javascript,JavaScript的一个不好的部分是,如果使用以0开头的parseInt,那么它可能会将数字视为八进制 i = parseInt(014); // Answer: 12 问:如何重新定义parseInt,使其默认为基数10?我假设你会使用原型方法 编辑: 也许我应该这样做: $.fn.extend({ parseInt:function(X) { return parseInt(X,10); } }); 无论如何,当你说014时,它已经表示数字12,因此pa
i = parseInt(014); // Answer: 12
问:如何重新定义parseInt,使其默认为基数10?我假设你会使用原型方法
编辑:
也许我应该这样做:
$.fn.extend({
parseInt:function(X) {
return parseInt(X,10);
}
});
无论如何,当你说014
时,它已经表示数字12,因此parseInt
对它没有任何用处
console.log('014==12:',014==12)
我想你的意思是parseInt('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"));
如果存储对原始
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);
}
parseInt()
还有第二个参数:
parseInt(x,[基数])
我个人会为此使用部分函数应用程序模式。比如:
(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"));
但我喜欢直截了当。引言
首先,parseInt
方法假设如下:
- 如果它以0x-开头,那么它就是十六进制李>
- 如果它以0开头,那么它就是八进制
- 否则它是十进制的
的“使用严格模式”
当您选择进入严格模式时,规则会发生变化:
- 如果以0x-开头,则为十六进制
- 否则它是十进制的
你应该得到10,10,8,10,16作为结果,如果这样好的话-如果不是你的浏览器坏了:(也许在jQuery的长期传统中,应该有一个$.parseInt()。我想你的意思是
parseInt('014')
,而不是parseInt(014))
014
是一个八进制数。0x14
是十六进制数。这不是十六进制。它是八进制数。所以014=10x8+4=12
如何var myParseInt=function(num,radix){return parseInt(num,radix | 10)}
?不确定如果将myParseInt
更改为parseInt
,会发生什么情况。我想知道我是否可以将decimalParseInt命名为:Int。或者Int会被视为no no吗?是的,看起来Int是从Java带来的保留字(根据JavaScript的权威指南).表2-2为ECMA扩展保留的单词此帖子可以编辑,因为不再适合假设存在javascript浏览器。谢谢Yuri!我在问题中没有明确表示我已经知道这一点,所以我感谢你这么说。不,我是指parseInt(014)。解决方案是“使用strict”Crockford说永远不要使用双等号。它应该是“基数===未定义”吗?既然您在上面的函数中更改了基数,那么在调用例程中是否也会更改它,或者变量是否作为值传递?@Pedro:Crockford是一个迂腐的%*^。更精确地说,您可以使用==
,但是=
@Pedro:它们的行为就像传递值一样。除非您传递数组或obje在这种情况下,它们的行为类似于引用。从您提供的ECMA-262链接中:“再次注意,无论严格模式和数字语法扩展如何,新的parseInt算法都将被应用:”。parseInt
在ES5中发生了变化,即使没有严格模式。