如何将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);
这是怎么回事?