在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

其他回答

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

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

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

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

这是一个tryParseInt方法,我正在使用,这将默认值作为第二个参数,所以它可以是任何你需要的。

function tryParseInt(str, defaultValue) {
    return parseInt(str) == str ? parseInt(str) : defaultValue;
}

tryParseInt("", 0);//0 
tryParseInt("string", 0);//0 
tryParseInt("558", 0);//558
//////////////////////////////////////////////////////
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

我很惊讶没有看到任何人提到使用Number()。如果提供,它将解析小数,因此将不同于parseInt(),但是它已经假设以10为基数,并将“”甚至“”转换为0。