Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Как проверить, содержит ли переменная число? (https://javascript.ru/forum/dom-window/78774-kak-proverit-soderzhit-li-peremennaya-chislo.html)

Malleys 13.11.2019 23:24

Цитата:

Сообщение от Маэстро
1. тип переменной Number? - пример: 1

Проверяйте так — typeof x === "number"
или так — Number.isFinite(x)
или так — Object(x) instanceof Number

Цитата:

Сообщение от Маэстро
2. если смотреть человеческими глазами, то это число? пример: '1'

Проверяйте так — Number.isFinite(+x)

Цитата:

Сообщение от Маэстро
3. содержит ли (буквально содержит) число? пример: '1w'

Проверяйте так — isFinite(Number.parseInt(x))
или так — /^\d+/.test(x)

ЕЩЁ
Цитата:

Сообщение от рони
пост #3

Может проверяться что угодно, поэтому может быть исключение!

Маэстро 13.11.2019 23:26

Цитата:

Сообщение от рони (Сообщение 515480)
Маэстро,
может быть нужно === а не ==?

в каком месте? если при проверке
var r1 = (a == x);
то нельзя. при var r1 = (a === x) javascript не произведет неявное преобразование типов и результат будет FALSE при x='1'.

рони 13.11.2019 23:34

Malleys,
Маэстро,
не понимаю что не так?
var a = null;
alert(a === +a);


var a = 5;
alert(a === +a);

Маэстро 13.11.2019 23:43

Цитата:

Сообщение от Malleys (Сообщение 515481)
Проверяйте так — isFinite(x)

isFinite(x) - неверно.
поставьте в x null, undefined или пустую строку и получите true (как будто это число, но это не число)

Маэстро 13.11.2019 23:49

Цитата:

Сообщение от рони (Сообщение 515483)
Malleys,
Маэстро,
не понимаю что не так?
var a = null;
alert(a === +a);


var a = 5;
alert(a === +a);

А при var a = '1'; ?
ответ будет false. но в строке число.

рони 13.11.2019 23:57

Цитата:

Сообщение от Маэстро
но в строке число.

:-? в переменной строка!
думаю все варианты уже сказаны выше, кому что нужно то и выберет.

Malleys 14.11.2019 00:03

Маэстро, Number.isFinite(+x)

Ещё раз посмотрите сообщение №11

Маэстро 14.11.2019 00:06

Цитата:

Сообщение от рони (Сообщение 515486)
:-? в переменной строка!

Вы имеете ввиду, что переменная имеет ТИП "строка" (string). Но в задаче спрашивается "Мы имеем число? или нет?" И не важно, что там строка. Именно в такой постановке я сталкивался с ситуацией чаще всего. В частности, при получении по API JSON/AJAX данных одну и ту же переменную могут сделать как числовой x=1, так и строковой x='1', могут поставить null, могут 0, или пустую строку.

Malleys 14.11.2019 00:07

Цитата:

Сообщение от рони
не понимаю что не так?

try {
    var a = 5n;
    alert(a === +a);
} catch(error) {
    alert("Разные типы!");
}


Цитата:

Сообщение от Маэстро
"Мы имеем число? или нет?"

Все варианты рассмотрены в сообщении №11, читайте внимательно!

Маэстро 14.11.2019 00:21

Цитата:

Сообщение от Malleys (Сообщение 515488)
Маэстро, Number.isFinite(+x)
Ещё раз посмотрите сообщение №11

Посмотрел. Еще раз: для ситуации, когда в переменной строка, в которой прописано число, то это надо трактовать как число.
при var x = '1'; вариант Number.isFinite(+x) выдаст false.
а нужно true. поэтому
(parseInt(x) == x)


Часовой пояс GMT +3, время: 19:51.