101 votes

Nombre négatif Javascript

Je veux vérifier si un nombre est négatif. Je cherche 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 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;
        }
   }
 

375voto

polygenelubricants Points 136838

Au lieu d'écrire une fonction pour faire cette vérification, vous devez simplement être en mesure d'utiliser cette expression:

(number < 0)

Javascript va évaluer cette expression en essayant d'abord de convertir le côté gauche pour un certain nombre de valeur avant de vérifier s'il est inférieur à zéro, ce qui semble être ce que tu voulais.


Les spécifications et les détails

Le comportement pour l' x < y est spécifié dans le§section 11.8.1 L'Opérateur inférieur (<), qui utilise §11.8.5 L'Abstrait Relationnelle de l'Algorithme de Comparaison.

La situation est très différente si les deux x et y sont des chaînes de caractères, mais depuis le côté droit est déjà un nombre en (number < 0), la comparaison va tenter de convertir le côté gauche pour un certain nombre à comparer numériquement. Si la gauche ne peut pas être convertie en un nombre, le résultat est false.

Notez que cela peut donner des résultats différents par rapport à ta regex approche, mais en fonction de ce que vous êtes en train de faire, il peut finir par faire la bonne chose, de toute façon.

  • "-0" < 0 est false, ce qui est cohérent avec le fait qu' -0 < 0 également false (voir: signé zéro).
  • "-Infinity" < 0 est true (infini est reconnu)
  • "-1e0" < 0 est true (notation scientifique littéraux sont acceptés)
  • "-0x1" < 0 est true (en hexadécimal, les littéraux sont acceptés)
  • " -1 " < 0 est true (certaines formes d'espaces sont autorisés)

Pour chacun de l'exemple ci-dessus, l'expression régulière de la méthode évaluer le contraire (true au lieu de false , et vice-versa).

Références

Voir aussi


Annexe 1: opérateur Conditionnel ?:

Il faut dire aussi que les déclarations de cette forme:

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

peut être reconstruit pour utiliser le ternaire/conditionnel ?: opérateur (§11.12) tout simplement:

return (someCondition) ? valueForTrue : valueForFalse;

Expressions idiomatiques de l' ?: peut rendre le code plus concis et lisible.

Questions connexes


Annexe 2: fonctions de conversion de Type

Javascript a des fonctions que vous pouvez appeler pour effectuer diverses conversions de type.

Quelque chose comme ce qui suit:

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

Peut être reconstruit à l'aide de l' ?: opérateur:

return (someVariable ? true : false);

Mais vous pouvez également simplifier ainsi:

return Boolean(someVariable);

Cela exige Boolean comme une fonction (§15.16.1) pour effectuer le type de conversion. Vous pouvez même appeler Number comme une fonction (§15.17.1) pour effectuer une conversion en nombre.

Questions connexes

14voto

bcherry Points 3541
 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 de la réponse similaire ci-dessus, la conversion avec +n n'est pas nécessaire.)

3voto

Wolph Points 28062

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X