Как проверить, содержит ли переменная число?
Здравствуйте!
Подскажите пожалуйста, как проверить, содержит ли переменная число? |
Точно:
typeof x === 'number'Просто: !isNaN(x) |
DDim1000,
a === +a |
Цитата:
var x;
.....
if (typeof x === 'number'){};
|
Цитата:
var a = 1, b = '1', c = +'1';
alert('a => '+typeof a+'\nb => '+typeof b+'\nc => '+typeof c)
|
DDim1000, если ты увернет что там конкретно число с типом "число" - да. Если там может быть строка или ещё что-нить похожее на число - используй второй вариант.
|
(parseInt(x) == x);
Вопрос "содержит ли переменная число?" можно трактовать по-разному:
1. тип переменной Number? - пример: 1 2. если смотреть человеческими глазами, то это число? пример: '1' 3. содержит ли (буквально содержит) число? пример: '1w' Фокус с плюсиком используется часто, но это в ряде случаев дает ложный результат: c = +'1'; При ограничении, что мы имеем дело с целыми числами, я использую проверку: (parseInt(x) == x)
var x = 1; // a=1 r1=true/b=1 r2=number
var x = '1'; // a=1 r1=true/b=1 r2=number
var x = 0; // a=0 r1=true/b=0 r2=number
var x = '0'; // a=0 r1=true/b=0 r2=number
var x = ''; // a=NaN r1=false/b=0 r2=number
var x; // a=NaN r1=false/b=0 r2=number! (x === undefined)
var x = null; // a=NaN r1=false/b=0 r2=number!
var x = '1w'; // a=1 r1=false/b=NaN r2=number! --- этот вариант можно трактовать по-разному...
var a = parseInt(x)
var b = +x;
var r1 = (a == x);
var r2 = typeof b;
alert('a=' + a + ' r1=' + r1 + '/b=' + b + ' r2=' + r2);
В примерах с 5 по 8 плюсование всегда сообщает о number, хотя в переменной не число. |
Цитата:
|
Цитата:
|
Маэстро,
может быть нужно === а не ==? пост #3 |
Цитата:
или так — Number.isFinite(x) или так — Object(x) instanceof Number Цитата:
Цитата:
или так — /^\d+/.test(x) ЕЩЁ Цитата:
|
Цитата:
var r1 = (a == x); то нельзя. при var r1 = (a === x) javascript не произведет неявное преобразование типов и результат будет FALSE при x='1'. |
Malleys,
Маэстро, не понимаю что не так? var a = null; alert(a === +a); var a = 5; alert(a === +a); |
Цитата:
поставьте в x null, undefined или пустую строку и получите true (как будто это число, но это не число) |
Цитата:
ответ будет false. но в строке число. |
Цитата:
думаю все варианты уже сказаны выше, кому что нужно то и выберет. |
Маэстро, Number.isFinite(+x)
Ещё раз посмотрите сообщение №11 |
Цитата:
|
Цитата:
try {
var a = 5n;
alert(a === +a);
} catch(error) {
alert("Разные типы!");
}
Цитата:
|
Цитата:
при var x = '1'; вариант Number.isFinite(+x) выдаст false. а нужно true. поэтому (parseInt(x) == x) |
Цитата:
var x = '1'; var isNumber = Number.isFinite(+x); alert(isNumber); Так что теперь не только посмотрите, но и проверьте! Проверьте внимательно! |
Цитата:
Будем пробовать вариант Number.isFinite(+x), хотя мне несколько непривычно ;) P.S. не, не будем. IE11 не поддерживает isFinite(). А у нас его пока полно... |
Цитата:
|
| Часовой пояс GMT +3, время: 20:43. |