在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插件可以做类似的事情?
当前回答
我创建了一个2原型来为我处理这个,一个用于数字,一个用于字符串。
// This is a safety check to make sure the prototype is not already defined.
Function.prototype.method = function (name, func) {
if (!this.prototype[name]) {
this.prototype[name] = func;
return this;
}
};
// returns the int value or -1 by default if it fails
Number.method('tryParseInt', function (defaultValue) {
return parseInt(this) == this ? parseInt(this) : (defaultValue === undefined ? -1 : defaultValue);
});
// returns the int value or -1 by default if it fails
String.method('tryParseInt', function (defaultValue) {
return parseInt(this) == this ? parseInt(this) : (defaultValue === undefined ? -1 : defaultValue);
});
如果你不想使用安全检查,使用
String.prototype.tryParseInt = function(){
/*Method body here*/
};
Number.prototype.tryParseInt = function(){
/*Method body here*/
};
使用示例:
var test = 1;
console.log(test.tryParseInt()); // returns 1
var test2 = '1';
console.log(test2.tryParseInt()); // returns 1
var test3 = '1a';
console.log(test3.tryParseInt()); // returns -1 as that is the default
var test4 = '1a';
console.log(test4.tryParseInt(0));// returns 0, the specified default value
其他回答
// 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”,但随后需要添加一个前缀,以表明它是小数而不是八进制数
对于其他人寻找这个解决方案,只需使用:~~没有parseInt,这是最干净的模式。
var a = 'hello';
var b = ~~a;
如果是NaN,它将返回0。
奥林匹克广播服务公司。此解决方案仅适用于整数
var value = isNaN(parseInt(tbb)) ? 0 : parseInt(tbb);
这是一个tryParseInt方法,我正在使用,这将默认值作为第二个参数,所以它可以是任何你需要的。
function tryParseInt(str, defaultValue) {
return parseInt(str) == str ? parseInt(str) : defaultValue;
}
tryParseInt("", 0);//0
tryParseInt("string", 0);//0
tryParseInt("558", 0);//558