Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как опознать число? (https://javascript.ru/forum/misc/4226-kak-opoznat-chislo.html)

Riim 03.07.2009 17:40

Зачем вообще учитывать Infinity ? Я понимаю NaN.

Kolyaj 03.07.2009 17:46

Ну помолчал и будя.

А в чем цимес? isFinite же есть. А если бесконечности должны быть числами, то isNaN есть.

Octane 03.07.2009 18:00

Да сбили меня этими Infinity :stop:

Вообще вырисовывался такой вариант:
var a = NaN;
var b = 1;
var c = {};
var d = Infinity;
 
function isNumber(x) {
   return ! isNaN(x * 1);
}
 
alert([isNumber(a), isNumber(b), isNumber(c), isNumber(d)]);

тут isNumber(Infinity) выдает true.

В итоге мы пришли к реализации функционала встроенной функции isFinite.

Kolyaj 03.07.2009 18:02

Интересней реализовать isNaN :)

Riim 03.07.2009 18:15

Мой вариант выдает те же результаты и работает быстрей.

Octane 03.07.2009 18:23

Riim, в твоем варианте есть ошибка:
function isNumber(x) {
	return x < 0 || x > 0 || x == 0;
}
alert(isNumber(false));


Цитата:

Сообщение от Riim
Мой вариант … работает быстрей.

Проверял?
function isNumber(x) {
	return ! isNaN(x * 1);
}

function isNumber1(x) {
	return x < 0 || x > 0 || x === 0;
}

var t1 = new Date().getTime(), i = 100000;

while (i--) {
	isNumber(NaN);
	isNumber(1);
	isNumber({});
}

t1 = new Date().getTime() - t1;

var t2 = new Date().getTime();

i = 100000;

while (i--) {
	isNumber1(NaN);
	isNumber1(1);
	isNumber1({});
}

t2 = new Date().getTime() - t2;

alert([t1, t2]);

Riim 03.07.2009 18:24

Опять две "m" :(

Kolyaj 03.07.2009 18:29

Octane,
кликай по нику, зачем его писать?

Riim 03.07.2009 18:29

На копейки, но быстрей (Chrome). Если тестировать только на числах (на практике эта функция в основном их будет принимать), то заметно быстрей.
Куски "x > 0" и "x < 0" можно поменять местами, т. к. на практике положительные числа будут чаще.

Riim 03.07.2009 18:32

Цитата:

Сообщение от Octane
в твоем варианте есть ошибка

И в твоем тоже: на null говорит, что это число.


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