Зачем вообще учитывать Infinity ? Я понимаю NaN.
|
Ну помолчал и будя.
А в чем цимес? isFinite же есть. А если бесконечности должны быть числами, то isNaN есть. |
Да сбили меня этими 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. |
Интересней реализовать isNaN :)
|
Мой вариант выдает те же результаты и работает быстрей.
|
Riim, в твоем варианте есть ошибка:
function isNumber(x) {
return x < 0 || x > 0 || x == 0;
}
alert(isNumber(false));
Цитата:
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]);
|
Опять две "m" :(
|
Octane,
кликай по нику, зачем его писать? |
На копейки, но быстрей (Chrome). Если тестировать только на числах (на практике эта функция в основном их будет принимать), то заметно быстрей.
Куски "x > 0" и "x < 0" можно поменять местами, т. к. на практике положительные числа будут чаще. |
Цитата:
|
| Часовой пояс GMT +3, время: 13:36. |