如何将NaN从parseInt变成0为空string?

是否有可能以某种方式返回0而不是NaN在JavaScript中parsing值时?

在空string的情况下parseInt返回NaN

是否有可能在JavaScript中做这样的事情来检查NaN

 var value = parseInt(tbb) == NaN ? 0 : parseInt(tbb) 

或者也许有另一个function或jQuery插件可能做类似的事情?

 var s = ''; var num = parseInt(s) || 0; 

你也可以使用isNaN()函数:

 var s = '' var num = isNaN(parseInt(s)) ? 0 : parseInt(s) 

我很惊讶没有看到任何人提到使用Number() 。 当然,如果提供的话它会parsing小数,所以会比parseInt()不同的作用,但是它已经假定了基数为10,并且将“”甚至“”变为0。

对于不限于parseInt ,可以使用按位或运算符(隐式地将ToInt32调用到其操作数中)。

 var value = s | 0; // NaN | 0 ==>> 0 // '' | 0 ==>> 0 // '5' | 0 ==>> 5 // '33Ab' | 0 ==>> 0 // '0x23' | 0 ==>> 35 // 113 | 0 ==>> 113 // -12 | 0 ==>> -12 // 3.9 | 0 ==>> 3 

注意: ToInt32不同于parseInt 。 (即parseInt('33Ab') === 33

为什么不重写该函数? 在这种情况下,您可以确保在NaN情况下返回0

 (function(original) { parseInt = function() { return original.apply(window, arguments) || 0; }; })(parseInt); 

现在,在你的代码的任何地方:

 parseInt('') === 0 

问题

其他答案没有考虑到0是虚假的,因此下面是20而不是0:

 var myNumber = parseInt('0') || 20; // 20 

解决scheme

我提出了一个帮助函数,它解决了大部分的问题:

 function getNumber(number, defaultNumber) { return isNaN(parseInt(number, 10)) ? defaultNumber : parseInt(number, 10); } 

辅助函数将给出以下结果:

 getNumber('0', 20); // 0 getNumber('2', 20); // 2 getNumber('2.2', 20); // 2 getNumber('any string', 20); // 20 getNumber(undefined, 20); // 20 getNumber(null, 20); // 20 getNumber(NaN, 20); // 20 getNumber(false, 20); // 20 getNumber(true, 20); // 20 

做一个空string的单独检查(因为它是一个特定的情况),并在这种情况下将其设置为零。

你可以在开始时加上“0”,但是你需要添加一个前缀来表明它是一个十进制而不是八进制数

我有一个类似的问题(火狐v34)与简单的string,如:

 var myInt = parseInt("b4"); 

所以我想到了一个简单的方法:

 var intVal = ("" + val).replace(/[^0-9]/gi, ""); 

然后得到所有愚蠢的复杂来处理非简单的东西的浮动+整数:

 var myval = "12.34"; function slowParseNumber(val, asInt){ var ret = Number( ("" + val).replace(/[^0-9\.]/gi, "") ); return asInt ? Math.floor(ret) : ret; } var floatVal = slowParseNumber(myval); var intVal = slowParseNumber(myval, true); console.log(floatVal, intVal); 

它会返回0的东西,如:

 var intVal = slowParseNumber("b"); // yeilds 0 
 var value = isNaN(parseInt(tbb)) ? 0 : parseInt(tbb); 
 ////////////////////////////////////////////////////// function ToInt(x){x=parseInt(x);return isNaN(x)?0:x;} ////////////////////////////////////////////////////// var x = ToInt(''); //-> x=0 x = ToInt('abc') //-> x=0 x = ToInt('0.1') //-> x=0 x = ToInt('5.9') //-> x=5 x = ToInt(5.9) //-> x=5 x = ToInt(5) //-> x=5 

也是这样,为什么不写一个函数并在需要时调用它。 我假设它是进入表单字段进行计算。

 var Nanprocessor = function (entry) { if(entry=="NaN") { return 0; } else { return entry; } } outputfield.value = Nanprocessor(x); // where x is a value that is collected from a from field // ie say x =parseInt(formfield1.value); 

这是怎么回事?