Почему parseInt (str) не возвращает целое число? - PullRequest
0 голосов
/ 30 апреля 2019

Я работаю над введением javascript в freeCodeCamp.Вот подсказка: используйте parseInt () в функции convertToInteger, чтобы она преобразовывала входную строку str в целое число и возвращала ее.

Вот что у меня есть сейчас.

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

convertToInteger ("56") не возвращает 56. Он возвращает число, а строка слов возвращает NaN.

Ничего из того, что я искал, не сработало (включая определение радиуса и множество других параметров),Из всех решений, которые я пробовал, это самое правильное решение при запуске, и на этот вопрос нет подсказок.

Чего мне не хватает?

1 Ответ

5 голосов
/ 30 апреля 2019

Это условие:

if (m!=Number) {

всегда будет истинным.parseInt возвращает number.Number - это функция.(some number) != (some function) всегда будет истинным. Если это должна была быть проверка типа, это будет if (typeof m !== "number") , но снова, parseInt всегда возвращает число.

ЧислоТем не менее, parseInt возврат может быть значением NaN ("не число"), что означает, что parseInt не может найти любых разборчивых цифр в начале строки.Вы можете проверить это с помощью глобальной функции isNaN (или Number.isNaN).(Вы не можете сделать это с if (m === NaN), потому что NaN странно и не равно самому себе.)


¹ Если кто-то специально не пытается сделать это ложным путемпереопределение valueOf в функции для возврата числа:

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

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

«Всегда будет верно» будет гарантировано, если вы будете использовать !== вместо !=.

...