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

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

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

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

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


当前回答

对于不受parseInt限制的人,可以使用按位的OR运算符(它隐式地调用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)

其他回答

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

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

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

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

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

var value = isNaN(parseInt(tbb)) ? 0 : parseInt(tbb);

同样地,为什么不编写一个函数并在任何需要的地方调用它呢?我假设它是表单字段执行计算的入口。

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
// i.e say x =parseInt(formfield1.value); 

这样做有什么不对?

为什么不重写这个函数呢?在这种情况下,你总是可以确保它在NaN的情况下返回0:

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

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

parseInt('') === 0

在我看来,这项工作比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