是否有可能以某种方式返回 0 而不是NaN
在 JavaScript 中解析值时?
在空字符串的情况下parseInt
返回NaN
。
是否可以在 JavaScript 中做类似的事情来检查NaN
?
var value = parseInt(tbb) == NaN ? 0 : parseInt(tbb)
或者也许有另一个功能或 jQuery 插件可以做类似的事情?
是否有可能以某种方式返回 0 而不是NaN
在 JavaScript 中解析值时?
在空字符串的情况下parseInt
返回NaN
。
是否可以在 JavaScript 中做类似的事情来检查NaN
?
var value = parseInt(tbb) == NaN ? 0 : parseInt(tbb)
或者也许有另一个功能或 jQuery 插件可以做类似的事情?
var s = '';
var num = parseInt(s) || 0;
当不与布尔值一起使用时,逻辑 OR ( ||
) 运算符返回第一个表达式 ( parseInt(s)
) 如果它可以被评估为真,否则返回第二个表达式 (0)。的返回值为parseInt('')
NaN。NaN 的计算结果为 false,因此num
最终设置为 0。
您还可以使用该isNaN()
功能:
var s = ''
var num = isNaN(parseInt(s)) ? 0 : parseInt(s)
我很惊讶没有看到有人提到使用Number()
. 如果提供的话,它会解析小数,因此其行为与 不同parseInt()
,但它已经假定基数为 10,并且会将 "" 甚至 " " 变为 0。
问题
其他答案没有考虑到这0
是假的,因此以下将是 20 而不是 0:
const myNumber = parseInt('0') || 20; // 20
解决方案
我提出了一个辅助函数,它解决了大部分问题:
function getNumber({ value, defaultValue }) {
const num = parseInt(value, 10);
return isNaN(num) ? defaultValue : num;
}
辅助函数将给出以下结果:
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
对于不受 限制的人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
)