在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

其他回答

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

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

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

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

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

我有一个类似的问题(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

对于不受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)