我在v8.11.3中使用了node.js。
parseInt("")
返回NaN
,但是isNaN("")
返回false
:
console.log(
parseInt(''),
isNaN('')
);
另一个例子:
console.log(
parseFloat('0x5'),
parseInt('0x5')
);
答案 0 :(得分:3)
每个MDN文档,parseInt:
如果第一个字符不能转换为数字,则parseInt返回NaN。
空字符串中没有第一个字符-无法将其转换为数字,因此返回NaN
。
但是isNaN是不同的。正如MDN的第一段所述:
注意:isNaN函数内部的强制具有有趣的规则;您可能还想使用ECMAScript 2015中定义的Number.isNaN()。
...
当isNaN函数的参数不是Number类型时,该值首先被强制为Number。
当强制为数字时,空字符串为0:
const result = Number('');
console.log(result + ' : ' + typeof result);
您可以尝试使用parseInt
然后然后检查结果是否为NaN
:
const possibleInt = parseInt('');
console.log(Number.isNaN(possibleInt));
答案 1 :(得分:0)
使用Number()只会解决问题。例如:
parseInt("14px"); // 14
parseInt("abc"); // NaN
parseInt(""); // NaN (i.e. null string is a number)
相对于isNaN的使用:
isNaN("14px"); // false
isNaN("abc"); // true
isNaN(""); // false
相对于Number()的使用:
Number("14px"); // NaN
Number("abc"); // NaN
Number(""); // 0
而且,使其变得更加复杂,您甚至无法做到:
parseInt(x) == NaN ? 0 : parseInt(x);
因为与NaN的比较总是错误的,即使NaN == NaN也是错误的。
我发现的最简单的是:
x=="" || !isNaN(x) ? 0 : parseInt(x);
但这是假设空字符串是唯一的异常,因此它可能无法在所有情况下都起作用。