Проверка на целое число JS

299
14 марта 2022, 11:20

Вступление: Писал проверку на то что вводит пользователь, реализовывал через input type = 'text', однако потом решил попробовать через prompt и результат один и тот же.

Проблема: проверял через Number.isInteger(x); Если число x введено через input или prompt и далее превращается в целое число parseInt(x). То Number.isInteger(x) покажет false. Напротив, если число изначально объявить let x = 76, то Number.isInteger(x) - true.

n = prompt();
parseInt(n, 10);
console.log(Number.isInteger(n)); //false
n = 67;
console.log(Number.isInteger(n)); //true

Вопрос: Почему так происходит? Как от этого избавиться?

Answer 1

В вашем коде есть ошибка, parseInt не изменяет переданное значение, а возвращает новое. В вашем случае при первой проверке n является строкой.

Исправленная версия:

let n = parseInt(prompt(), 10);
console.log(Number.isInteger(n)); //true
n = 67;
console.log(Number.isInteger(n)); //true
Answer 2

В Вашей функции Вы задаёте prompt переменной n.
Дальше Вы проводите перевод в число, но не задаёте ей переменную.

Чтобы всё работало - воспользуйтесь:

    n = prompt(); 
    n = parseInt(n, 10); // Присваиваем переменной n значение перевода в число. 
    console.log(Number(n)); 
    console.log(Number.isInteger(n)); //false 
 
    n = 67; 
    console.log(Number(n)); 
    console.log(Number.isInteger(n)); //true

Answer 3

Функция parseInt пытается распарсить строку в число. Т.е. она довольна не прихотлива и, например значение 23gff превратит в 23.

console.log(parseInt('21fgf', 10), Number.isInteger(parseInt('21fgf', 10))); 
console.log(parseInt('21.3', 10), Number.isInteger(parseInt('21.3', 10))); 
console.log(parseInt('21,32', 10), Number.isInteger(parseInt('21,32', 10))); 
console.log(parseInt('21', 10), Number.isInteger(parseInt('21', 10)));

Это не то поведение, какое вы ожидаете, как мне кажется.

Что бы этого избежать, надо строку преобразовать в число с помощью Number.

console.log(Number('21fgf'), Number.isInteger(Number('21fgf'))); 
console.log(Number('21.3'), Number.isInteger(Number('21.3'))); 
console.log(Number('21,32'), Number.isInteger(Number('21,32'))); 
console.log(Number('21'), Number.isInteger(Number('21')));

READ ALSO
Как задать координаты курсора?

Как задать координаты курсора?

Есть сайт, есть курсор, и есть скрипт:

150
Изменение свойств футера при изменении размеров контента

Изменение свойств футера при изменении размеров контента

нужно сделать так чтобы если содержимое страницы больше чем 100% высоты экрана позиция футера менялась на static, а если меньше чем сто и еще минус...

117
JS: Как в array добавить елементи взяв иx из object?

JS: Как в array добавить елементи взяв иx из object?

Есть object, нужено запушить его values в [], если key === 'name'

199