Подтвердить что ты не робот

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

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

  function negative(number) { 
        if (number.match(/^-\d+$/)) {
            return true;
        } else {
            return false;
        }
   }
4b9b3361

Ответ 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 и наоборот).

Ссылки

См. также


Приложение 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), чтобы выполнить преобразование в число.

Связанные вопросы

Ответ 2

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

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

Ответ 3

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

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

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

Ответ 4

Это старый вопрос, но у него много просмотров, поэтому я думаю, что это важно для его обновления.

В ECMAScript 6 была введена функция Math.sign(), которая возвращает знак числа (1, если он положительный, -1, если он отрицательный) или NaN, если он не является числом. Reference

Вы можете использовать его как:

var number = 1;

if(Math.sign(number) === 1){
    alert("I'm positive");
}else if(Math.sign(number) === -1){
    alert("I'm negative");
}else{
    alert("I'm not a number");
}

Ответ 5

В ES6 вы можете использовать функцию Math.sign, чтобы определить,

1. its +ve no
2. its -ve no
3. its zero (0)
4. its NaN


console.log(Math.sign(1))        // prints 1 
console.log(Math.sign(-1))       // prints -1
console.log(Math.sign(0))        // prints 0
console.log(Math.sign("abcd"))   // prints NaN