Je veux vérifier si un nombre est négatif. Je recherche le moyen le plus simple}, donc une fonction javascript prédéfinie serait la meilleure mais je n'ai encore rien trouvé, voici ce que j'ai pour l'instant mais je ne pense pas qu'il s'agisse d'un bonne façon:
function negative(number) {
if (number.match(/^-\d+$/)) {
return true;
} else {
return false;
}
}
Au lieu d'écrire une fonction pour effectuer cette vérification, vous devriez juste pouvoir utiliser cette expression:
(number < 0)
Javascript évaluera cette expression en essayant d'abord de convertir le côté gauche en valeur numérique avant de vérifier si elle est inférieure à zéro, ce qui semble être ce que vous vouliez.
Le comportement de 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 x
et y
sont des chaînes, mais comme 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 le côté 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 les regex, mais en fonction de ce que vous essayez de faire, cela peut finir par être correct.
"-0" < 0
est false
, ce qui est cohérent avec le fait que -0 < 0
est aussi false
.__ (voir: signé zéro )."-Infinity" < 0
est true
(l'infini est reconnu)"-1e0" < 0
est true
(les littéraux en notation scientifique sont acceptés)"-0x1" < 0
est true
(les littéraux hexadécimaux sont acceptés)" -1 " < 0
est true
(certaines formes d'espaces sont autorisées)Pour chacun des exemples ci-dessus, la méthode regex évaluerait le contraire (true
au lieu de false
et vice versa).
<
)?:
Il faut également dire que les déclarations de cette forme:
if (someCondition) {
return valueForTrue;
} else {
return valueForFalse;
}
peut être restructuré pour utiliser l'opérateur ternaire/conditionnel ?:
( §11.12 ) simplement:
return (someCondition) ? valueForTrue : valueForFalse;
L'utilisation idiomatique de ?:
peut rendre le code plus concis et lisible.
Javascript comporte des fonctions que vous pouvez appeler pour effectuer diverses conversions de types.
Quelque chose comme ce qui suit:
if (someVariable) {
return true;
} else {
return false;
}
Peut être refactorisé à l'aide de l'opérateur ?:
pour:
return (someVariable ? true : false);
Mais vous pouvez aussi simplifier davantage ceci pour:
return Boolean(someVariable);
Ceci appelle Boolean
en tant que fonction ( §15.16.1 ) pour effectuer la conversion de type souhaitée. Vous pouvez également appeler Number
en tant que fonction ( §15.17.1 ) pour effectuer une conversion en nombre.
function negative(n) {
return n < 0;
}
Votre expression rationnelle devrait fonctionner correctement pour les nombres de chaînes, mais cela est probablement plus rapide. (édité à partir 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
consiste à convertir des chaînes en nombres.
C'est une vieille question, mais qui a beaucoup de points de vue, je pense qu'il est important de l'actualiser.
ECMAScript 6 a apporté la fonction Math.sign()
, qui retourne le signe d'un nombre (1 si c'est positif, -1 si c'est négatif) ou NaN si ce 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 la fonction Math.sign pour 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