Javascript отрицательное число

Я хочу проверить, если число отрицательное. Я ищу самый простой способ , поэтому заранее определенная функция javascript была бы лучшей, но я еще ничего не нашел, вот что у меня есть, но я не думаю, что это хороший способ:

  function negative(number) { 
        if (number.match(/^-\d+$/)) {
            return true;
        } else {
            return false;
        }
   }
59
задан CharlesB 4 May 2012 в 23:18
поделиться

3 ответа

Вместо того, чтобы писать функцию для этой проверки, вы должны просто иметь возможность использовать это выражение:

(number < 0)

Javascript оценит это выражение, сначала попытавшись преобразовать левую часть в число значение, прежде чем проверять, меньше ли оно нуля, что, кажется, то, что вы хотели.


Спецификации и подробности

Поведение для x < y указано в §11.8.1 Оператор «меньше» (<), который использует §11.8.5 Алгоритм абстрактного реляционного сравнения .

Ситуация сильно отличается, если и x, и y являются строками, но поскольку правая часть уже является числом в (число < 0), сравнение попытается преобразовать левую часть в число для численного сравнения. Если левая часть не может быть преобразована в число, результатом будет ложь.

Обратите внимание, что это может дать разные результаты по сравнению с вашим подходом, основанным на регулярных выражениях, но в зависимости от того, что вы пытаетесь сделать, это может в конечном итоге сделать правильно.

  • "-0" < 0 есть ложь, что согласуется с тем фактом, что -0 < 0 также ложь (см.: ноль со знаком).
  • "-бесконечность" < 0 равно истине (бесконечность признается)
  • "-1e0" < 0 равно истине (литералы научной записи принято)
  • "-0x1" < 0 равно true (допускаются шестнадцатеричные литералы)
  • " -1 "< 0 равно true (некоторые разрешены формы пробелов)

Для каждого из приведенных выше примеров метод регулярных выражений будет иметь противоположное значение (true вместо false и наоборот).

Ссылки

См. также


Приложение 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) для выполнения желаемого преобразования типа. Аналогичным образом вы можете вызвать Число как функцию (§15.17.1), чтобы выполнить преобразование в число.

Вопросы по теме

288
ответ дан 24 November 2019 в 17:55
поделиться

Как насчет чего-то вроде просто как:

function negative(number){
    return number < 0;
}

Часть * 1 предназначена для преобразования строк в числа.

3
ответ дан 24 November 2019 в 17:55
поделиться
function negative(n) {
  return n < 0;
}

Ваше регулярное выражение должно нормально работать со строковыми числами, но это, вероятно, быстрее. (отредактировано из комментария в аналогичном ответе выше, преобразование с помощью +n не требуется.)

12
ответ дан 24 November 2019 в 17:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: