Nombre négatif Javascript
je veux vérifier si un nombre est négatif. Je cherche la de la façon la plus facile , donc une fonction javascript prédéfinie serait la meilleure mais je n'ai pas encore trouvé quoi que ce soit, voici ce que j'ai jusqu'à présent mais je ne pense pas que ce soit une bonne façon:
function negative(number) {
if (number.match(/^-d+$/)) {
return true;
} else {
return false;
}
}
5 réponses
au lieu d'écrire une fonction pour faire cette vérification, vous devriez juste pouvoir utiliser cette expression:
(number < 0)
Javascript va évaluer cette expression en essayant d'abord de convertir le côté gauche à une valeur numérique avant de vérifier si elle est inférieure à zéro, ce qui semble être ce que vous vouliez.
spécifications et détails
le comportement pour x < y
est spécifié dans §11.8.1 L'opérateur inférieur ( <
) , qui utilise §11.8.5 L'algorithme de comparaison relationnelle abstraite .
la situation est très différente si les deux x
et y
sont des cordes, mais puisque le côté droit est déjà un nombre dans (number < 0)
, la comparaison tentera de convertir le côté gauche en un nombre à comparer numériquement. Si la gauche ne peut pas être converti en nombre, le résultat est false
.
notez que cela peut donner des résultats différents par rapport à votre approche basée sur regex, mais selon ce que vous essayez de faire, cela peut finir par faire la bonne chose de toute façon.
-
"-0" < 0
estfalse
, ce qui est compatible avec le fait que-0 < 0
est aussifalse
(voir: signé zéro ). -
"-Infinity" < 0
esttrue
(l'infini est reconnu) -
"-1e0" < 0
istrue
(notation scientifique littérale acceptée) -
"-0x1" < 0
istrue
(littérales hexadécimales acceptées) -
" -1 " < 0
esttrue
(certaines formes d'espaces sont autorisés)
pour chacun des exemples ci-dessus, la méthode regex évaluerait le contraire ( true
au lieu de true
). false
et vice versa).
Références
- ECMAScript 5 (PDF)
- ECMAScript 3, §11.8.1(
<
) - ECMAScript 3, §11.8.5 L'Algorithme De Comparaison Relationnelle Abstraite
voir aussi
Appendice 1: opérateur conditionnel ?:
il convient également de dire que les déclarations de ce formulaire:
if (someCondition) {
return valueForTrue;
} else {
return valueForFalse;
}
peut être modifié pour utiliser l'opérateur ternaire/conditionnel ?:
( §11.12 ) to simply:
return (someCondition) ? valueForTrue : valueForFalse;
expressions Idiomatiques ?:
peut rendre le code plus concis et lisible.
questions connexes
appendice 2: fonctions de conversion de Type
Javascript a fonctions que vous pouvez appeler pour effectuer diverses conversions de type.
quelque chose comme ceci:
if (someVariable) {
return true;
} else {
return false;
}
peut être refactorisé en utilisant l'opérateur ?:
à:
return (someVariable ? true : false);
mais vous pouvez également simplifier davantage ce à:
return Boolean(someVariable);
cette fonction appelle Boolean
( §15.16.1 ) pour effectuer la conversion de type désirée. Vous pouvez également appeler Number
en fonction ( §15.17.1 ) pour effectuer une conversion en nombre.
questions connexes
function negative(n) {
return n < 0;
}
votre regex devrait fonctionner correctement pour les numéros de chaîne, mais c'est probablement plus rapide. (tiré du commentaire dans la réponse similaire ci-dessus, la conversion avec +n
n'est pas nécessaire.)
Que Diriez-vous de quelque chose d'aussi simple que:
function negative(number){
return number < 0;
}
la partie * 1
sert à convertir des chaînes en nombres.
C'est une vieille question mais elle a beaucoup de points de vue donc je pense que c'est important de la mettre à jour.
ECMAScript 6 a apporté la fonction Math.sign()
, qui renvoie le signe d'un nombre (1 s'il est positif, -1 s'il est négatif) ou NaN s'il n'est pas un nombre. référence
Vous pouvez l'utiliser comme:
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");
}
dans ES6 vous pouvez utiliser les mathématiques.signe de la fonction, afin de déterminer 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