为什么 parseInt(str) 不返回整数?

Why Isn't parseInt(str) Returning an Integer?

我正在学习 freeCodeCamp 的 javascript 介绍。这是提示:在 convertToInteger 函数中使用 parseInt() 将输入字符串 str 转换为整数,然后 returns 它。

这是我现在拥有的。

function convertToInteger(str) {
var m = parseInt(str);
if (m!=Number) {
  return NaN;
}
  else {
    return m;}
}
convertToInteger("56");

convertToInteger("56") 不是 return 56。它是 return 一个数字,而一串单词是 return NaN。

我搜索过的任何东西都不起作用(包括指定基数和各种其他选项)。在我尝试过的所有解决方案中,这个在 运行 时是最正确的,并且没有为该问题提供任何提示。

我错过了什么?

这个条件:

if (m!=Number) {

永远是真的。 parseInt return 一个 numberNumber 是一个函数。 (some number) != (some function) 将永远是真的。¹如果那是一个类型检查,它将是 if (typeof m !== "number") 但是 又是 parseInt 总是 return是一个数字。

数字 parseInt returns 可以是 NaN ("not a number") 值,但是,这意味着 parseInt 找不到 any 字符串开头的可解析数字。您可以使用全局 isNaN 函数(或 Number.isNaN)检查它是否存在。 (你 不能 if (m === NaN) 做,因为 NaN 很奇怪,不等于它自己。)


¹ 除非有人特别试图通过将函数上的 valueOf 覆盖为 return 数字来使其为假:

function foo() {
}
// Don't do this. :-)
foo.valueOf = function() {
 return 42;
};

console.log(42 != foo); // false
console.log(42 == foo); // true

如果您使用 !== 而不是 !=,则 "will always be true" 将得到保证。