Ответ 1
Вместо написания функции для этой проверки вы должны просто использовать это выражение:
(number < 0)
Javascript будет оценивать это выражение, сначала попробовав преобразовать левую сторону в числовое значение, прежде чем проверять, меньше ли оно, что похоже на то, что вы хотели.
Технические характеристики и сведения
Поведение для x < y
указано в §11.8.1. Меньше, чем оператор (<
), который использует §11.8.5. Алгоритм абстрактного реляционного сравнения.
Ситуация сильно отличается, если оба x
и y
являются строками, но поскольку правая часть уже является числом в (number < 0)
, сравнение попытается преобразовать левую сторону в число, чтобы сравниваться численно. Если левая сторона не может быть преобразована в число, результат false
.
Заметьте, что это может дать разные результаты по сравнению с вашим подходом, основанным на регулярном выражении, но в зависимости от того, что вы пытаетесь сделать, это может привести к тому, что все будет правильно.
-
"-0" < 0
false
, что согласуется с тем, что-0 < 0
такжеfalse
(см. подписанный нуль). -
"-Infinity" < 0
true
(бесконечность подтверждается) -
"-1e0" < 0
true
(литералы научной нотации принимаются) -
"-0x1" < 0
true
(принимаются шестнадцатеричные литералы) -
" -1 " < 0
-true
(допускаются некоторые формы пробелов)
Для каждого из приведенных выше примеров метод регулярного выражения будет оценивать обратное (true
вместо false
и наоборот).
Ссылки
- ECMAScript 5 (PDF)
- ECMAScript 3, §11.8.1 Меньше, чем оператор (
<
) - ECMAScript 3, §11.8.5 Алгоритм анализа реляционных сравнений
См. также
Приложение 1: Условный оператор ?:
Следует также сказать, что утверждения этого вида:
if (someCondition) {
return valueForTrue;
} else {
return valueForFalse;
}
может быть реорганизован для использования тернарного/условного оператора ?:
(§11.12) просто:
return (someCondition) ? valueForTrue : valueForFalse;
Идиоматическое использование ?:
может сделать код более кратким и читаемым.
Связанные вопросы
Приложение 2: Функции преобразования типов
Javascript имеет функции, которые вы можете вызывать для выполнения различных преобразований типов.
Что-то вроде следующего:
if (someVariable) {
return true;
} else {
return false;
}
Может быть реорганизован с помощью оператора ?:
в:
return (someVariable ? true : false);
Но вы также можете упростить это:
return Boolean(someVariable);
Это вызывает Boolean
как функцию (§15.16.1), чтобы выполнить требуемое преобразование типа. Аналогично можно вызвать Number
как функцию (§15.17.1), чтобы выполнить преобразование в число.