Javascript número negativo


Quiero comprobar si un número es negativo. Estoy buscando la forma más fácil , por lo que una función javascript predefinida sería la mejor, pero aún no he encontrado nada, aquí está lo que tengo hasta ahora, pero no creo que esta sea una buena manera:

  function negative(number) { 
        if (number.match(/^-\d+$/)) {
            return true;
        } else {
            return false;
        }
   }
Author: CharlesB, 2010-08-26

5 answers

En lugar de escribir una función para hacer esta comprobación, debería ser capaz de usar esta expresión:

(number < 0)

Javascript evaluará esta expresión primero tratando de convertir el lado izquierdo a un valor numérico antes de verificar si es menor que cero, que parece ser lo que quería.


Especificaciones y detalles

El comportamiento para x < y se especifica en §11.8.1 El Operador Menos que(<), que utiliza §11.8.5 El Resumen Algoritmo de Comparación Relacional .

La situación es muy diferente si ambos x y y son cadenas, pero desde el lado derecho es ya un número en (number < 0), la comparación intentará convertir el lado izquierdo a un número para ser comparado numéricamente. Si el lado izquierdo no se puede convertir en un número, el resultado es false.

Tenga en cuenta que esto puede dar resultados diferentes cuando se compara con su enfoque basado en expresiones regulares, pero dependiendo de lo que es que estás tratando de hacer, puede terminar haciendo lo correcto de todos modos.

  • "-0" < 0 es false, lo que es consistente con el hecho de que -0 < 0 es también false (véase: firmado cero).
  • "-Infinity" < 0 es true (el infinito se reconoce)
  • "-1e0" < 0 es true (se aceptan literales de notación científica)
  • "-0x1" < 0 es true (se aceptan literales hexadecimales)
  • " -1 " < 0 es true (se permiten algunas formas de espacios en blanco)

Para cada uno de los ejemplo anterior, el método regex evaluaría lo contrario (true en lugar de false y viceversa).

Referencias

Véase también


Apéndice 1: Operador condicional ?:

También se debe decir que las declaraciones de esta forma:

if (someCondition) {
   return valueForTrue;
} else {
   return valueForFalse;
}

Se puede refactorizar para usar el operador ternario / condicional ?:(§11.12) para simplemente:

return (someCondition) ? valueForTrue : valueForFalse;

El uso idiomático de ?: puede hacer que el código sea más conciso y legible.

Cuestiones conexas


Apéndice 2: Funciones de conversión de tipos

Javascript tiene funciones que puede llamar para realizar varias conversiones de tipos.

Algo como lo siguiente:

if (someVariable) {
   return true;
} else {
   return false;
}

Se puede refactorizar usando el operador ?: para:

return (someVariable ? true : false);

Pero también puede simplificar esto a:

return Boolean(someVariable);

Esto llama a Boolean como una función (§15.16.1) para realizar la conversión de tipo deseada. Del mismo modo, puede llamar a Number como un función (§15.17.1) para realizar una conversión a número.

Cuestiones conexas

 247
Author: polygenelubricants,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:26:10
function negative(n) {
  return n < 0;
}

Su expresión regular debería funcionar bien para números de cadena, pero esto es probablemente más rápido. (editado del comentario en respuesta similar anterior, la conversión con +n no es necesaria.)

 11
Author: bcherry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-08-26 02:54:52

¿Qué tal algo tan simple como:

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

La parte * 1 es convertir cadenas a números.

 3
Author: Wolph,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-08-26 03:32:28

Esta es una pregunta antigua, pero tiene muchas vistas, así que creo que es importante actualizarla.

ECMAScript 6 trajo la función Math.sign(), que devuelve el signo de un número (1 si es positivo, -1 si es negativo) o NaN si no es un número. Referencia

Puedes usarlo como:

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
Author: Iván Rodríguez Torres,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-14 10:55:55

En ES6 puedes usar Matemáticas.función de signo para determinar si,

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
 0
Author: JTeam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-14 11:07:30