在JavaScript中解析值时,是否可能以某种方式返回0而不是NaN ?
如果是空字符串,parseInt返回NaN。
是否有可能在JavaScript中做这样的事情来检查NaN?
var value = parseInt(tbb) == NaN ? 0 : parseInt(tbb)
或者可能有另一个函数或jQuery插件可以做类似的事情?
在JavaScript中解析值时,是否可能以某种方式返回0而不是NaN ?
如果是空字符串,parseInt返回NaN。
是否有可能在JavaScript中做这样的事情来检查NaN?
var value = parseInt(tbb) == NaN ? 0 : parseInt(tbb)
或者可能有另一个函数或jQuery插件可以做类似的事情?
当前回答
我有一个类似的问题(firefox v34)简单的字符串,如:
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
其他回答
我很惊讶没有看到任何人提到使用Number()。如果提供,它将解析小数,因此将不同于parseInt(),但是它已经假设以10为基数,并将“”甚至“”转换为0。
你可以有非常干净的代码,我有类似的问题,我解决它使用:
var a="bcd";
~~parseInt(a);
var value = isNaN(parseInt(tbb)) ? 0 : parseInt(tbb);
// implicit cast
var value = parseInt(tbb*1); // see original question
解释一下,给那些不觉得它微不足道的人:
一种称为“隐式强制转换”的方法乘以1,试图将未知类型操作数转换为原始类型“number”。特别地,空字符串将变成数字0,使其成为parseInt()的合格类型…
上面的PirateApp也给出了一个很好的例子,他建议在+号前面加上+号,迫使JavaScript使用数字隐式强制转换。
8月20日更新:parseInt("0"+expr);给出更好的结果,特别是对于parseInt("0"+'str');
在我看来,这项工作比parseInt干净得多,使用+操作符
var s = '';
console.log(+s);
var s = '1024'
+s
1024
s = 0
+s
0
s = -1
+s
-1
s = 2.456
+s
2.456
s = ''
+s
0
s = 'wtf'
+s
NaN