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

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

55 голосов
/ 26 августа 2010

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

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

Ответы [ 5 ]

277 голосов
/ 26 августа 2010

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

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

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

12 голосов
/ 26 августа 2010
function negative(n) {
  return n < 0;
}

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

3 голосов
/ 02 декабря 2015

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

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

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

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");
}
3 голосов
/ 26 августа 2010

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

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

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

1 голос
/ 14 августа 2017

В 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
...