在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插件可以做类似的事情?
当前回答
这个问题
其他答案没有考虑到0是假的,因此下面的答案将是20而不是0:
const myNumber = parseInt('0') || 20; // 20
解决方案
我建议使用一个helper函数,它可以解决大部分问题:
function getNumber({ value, defaultValue }) {
const num = parseInt(value, 10);
return isNaN(num) ? defaultValue : num;
}
helper函数将给出以下结果:
getNumber({ value: "0", defaultValue: 20 }); // 0
getNumber({ value: "2", defaultValue: 20 }); // 2
getNumber({ value: "2.2", defaultValue: 20 }); // 2
getNumber({ value: "any string", defaultValue: 20 }); // 20
getNumber({ value: undefined, defaultValue: 20 }); // 20
getNumber({ value: null, defaultValue: 20 }); // 20
getNumber({ value: NaN, defaultValue: 20 }); // 20
getNumber({ value: false, defaultValue: 20 }); // 20
getNumber({ value: true, defaultValue: 20 }); // 20
其他回答
一个仍然允许使用基数的辅助函数
function parseIntWithFallback(s, fallback, radix) {
var parsed = parseInt(s, radix);
return isNaN(parsed) ? fallback : parsed;
}
对空字符串进行单独检查(因为这是一个特定的情况),在这种情况下将其设置为0。
您可以在开头添加“0”,但随后需要添加一个前缀,以表明它是小数而不是八进制数
这个问题
其他答案没有考虑到0是假的,因此下面的答案将是20而不是0:
const myNumber = parseInt('0') || 20; // 20
解决方案
我建议使用一个helper函数,它可以解决大部分问题:
function getNumber({ value, defaultValue }) {
const num = parseInt(value, 10);
return isNaN(num) ? defaultValue : num;
}
helper函数将给出以下结果:
getNumber({ value: "0", defaultValue: 20 }); // 0
getNumber({ value: "2", defaultValue: 20 }); // 2
getNumber({ value: "2.2", defaultValue: 20 }); // 2
getNumber({ value: "any string", defaultValue: 20 }); // 20
getNumber({ value: undefined, defaultValue: 20 }); // 20
getNumber({ value: null, defaultValue: 20 }); // 20
getNumber({ value: NaN, defaultValue: 20 }); // 20
getNumber({ value: false, defaultValue: 20 }); // 20
getNumber({ value: true, defaultValue: 20 }); // 20
// implicit cast
var value = parseInt(tbb*1); // see original question
解释一下,给那些不觉得它微不足道的人:
一种称为“隐式强制转换”的方法乘以1,试图将未知类型操作数转换为原始类型“number”。特别地,空字符串将变成数字0,使其成为parseInt()的合格类型…
上面的PirateApp也给出了一个很好的例子,他建议在+号前面加上+号,迫使JavaScript使用数字隐式强制转换。
8月20日更新:parseInt("0"+expr);给出更好的结果,特别是对于parseInt("0"+'str');
//////////////////////////////////////////////////////
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