是否有可能以某种方式返回 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)