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;
}
}
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
esfalse
, lo que es consistente con el hecho de que-0 < 0
es tambiénfalse
(véase: firmado cero). -
"-Infinity" < 0
estrue
(el infinito se reconoce) -
"-1e0" < 0
estrue
(se aceptan literales de notación científica) -
"-0x1" < 0
estrue
(se aceptan literales hexadecimales) -
" -1 " < 0
estrue
(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
- ECMAScript 5 (PDF)
- ECMAScript 3, §11.8.1 El Operador Menos que(
<
) - ECMAScript 3, §11.8.5 El Algoritmo de Comparación Relacional Abstracto
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
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.)
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.
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");
}
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
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