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;
        }
   }
46
demandé sur CharlesB 2010-08-26 06:48:13

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 est false , ce qui est compatible avec le fait que -0 < 0 est aussi false (voir: signé zéro ).
  • "-Infinity" < 0 est true (l'infini est reconnu)
  • "-1e0" < 0 is true (notation scientifique littérale acceptée)
  • "-0x1" < 0 is true (littérales hexadécimales acceptées)
  • " -1 " < 0 est true (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

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

247
répondu polygenelubricants 2017-05-23 12:26:10
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.)

11
répondu bcherry 2010-08-26 02:54:52

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.

3
répondu Wolph 2010-08-26 03:32:28

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");
}
3
répondu Iván Rodríguez Torres 2017-08-14 10:55:55

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
0
répondu JTeam 2017-08-14 11:07:30