Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 03.07.2009, 18:36
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

не знал, что:
alert(null * 1) // будет 0

Ушел читать спецификацию…
Ответить с цитированием
  #22 (permalink)  
Старый 03.07.2009, 18:37
Флудер
Отправить личное сообщение для ZoNT Посмотреть профиль Найти все сообщения от ZoNT
 
Регистрация: 25.07.2008
Сообщений: 1,271

[example run]function isNumber1(x) {
return x < 0 || x > 0 || x === 0;
}
alert(isNumber1('1'))[/example]
Ответить с цитированием
  #23 (permalink)  
Старый 03.07.2009, 18:51
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Все варианты трудно учесть, да и смысла не вижу. Например, если функция должна принимать число и получает NaN, то это ошибка и притом вполне возможная, если же она получает, например массив, то это уже неадекватная ошибка. Я пишу код под себя и сам я так точно не ошибусь.
Для чисел я обрабатываю такие варианты: положительные/отрицательные числа, 0, null, undefined, NaN
Для не чисел: null, undefined и если нет, то даже typeof/instanceof часто можно не смотреть (тут в каждой ситуации нужно отдельно думать)
Этого вполне хватает что бы учесть все !адекватные! ошибки.
Предложенный мною вариант все, что мне нужно учитывает, и более быстрого я не вижу.

Последний раз редактировалось Riim, 03.07.2009 в 18:53.
Ответить с цитированием
  #24 (permalink)  
Старый 03.07.2009, 19:10
...
Отправить личное сообщение для Zeroglif Посмотреть профиль Найти все сообщения от Zeroglif
 
Регистрация: 09.03.2008
Сообщений: 216

typeof x == 'number' && isFinite(x);
Ответить с цитированием
  #25 (permalink)  
Старый 03.07.2009, 19:20
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Наверное, самый железный вариант:
var a = NaN;
var b = 1;
var c = {};
var d = Infinity;
var e = null;
 
function isNumber(x) {
	return Object.prototype.toString.call(x) == "[object Number]" && isFinite(x);
}

alert([isNumber(a), isNumber(b), isNumber(c), isNumber(d), isNumber(e)]);
Ответить с цитированием
  #26 (permalink)  
Старый 04.07.2009, 01:12
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

а
var a = NaN;
var b = 1;
var c = {};
var d = Infinity;
var e = null;
 
function isNumber(x) {
    return (typeof x == "number" || x instanceof Number) && isFinite(x);
}
 
alert([isNumber(a), isNumber(b), isNumber(c), isNumber(d), isNumber(e)]);

UPD: уже вижу недостатки, хоть они и не всегда актуальны

Последний раз редактировалось x-yuri, 04.07.2009 в 01:35.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как опознать RegExp. Kolyaj Общие вопросы Javascript 25 04.07.2009 01:41
Как сделать, чтобы 2 ссылки отображались как hover при наведении мышкой на любую? Ava Элементы интерфейса 5 19.05.2009 23:24
как найти нужный объект? `p r o x y jQuery 2 05.05.2009 01:12
форма как в ExtJS 2 magistr_bender Общие вопросы Javascript 0 11.09.2008 16:01
Как прибавлять число к числу? Forgott Общие вопросы Javascript 9 06.05.2008 08:47