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

如果是空字符串,parseInt返回NaN。

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

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

或者可能有另一个函数或jQuery插件可以做类似的事情?


当前回答

// implicit cast
var value = parseInt(tbb*1); // see original question

解释一下,给那些不觉得它微不足道的人:

一种称为“隐式强制转换”的方法乘以1,试图将未知类型操作数转换为原始类型“number”。特别地,空字符串将变成数字0,使其成为parseInt()的合格类型…

上面的PirateApp也给出了一个很好的例子,他建议在+号前面加上+号,迫使JavaScript使用数字隐式强制转换。

8月20日更新:parseInt("0"+expr);给出更好的结果,特别是对于parseInt("0"+'str');

其他回答

对空字符串进行单独检查(因为这是一个特定的情况),在这种情况下将其设置为0。

您可以在开头添加“0”,但随后需要添加一个前缀,以表明它是小数而不是八进制数

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

当不与布尔值一起使用时,逻辑OR ||操作符如果可以计算为true,则返回第一个表达式parseInt(s),否则返回第二个表达式0。parseInt(")的返回值是NaN。NaN的值为false,因此num最终被设置为0。

//////////////////////////////////////////////////////
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

一个仍然允许使用基数的辅助函数

function parseIntWithFallback(s, fallback, radix) {
    var parsed = parseInt(s, radix);
    return isNaN(parsed) ? fallback : parsed;
}

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

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