webentwicklung-frage-antwort-db.com.de

Javascript negative Zahl

Ich möchte prüfen, ob eine Zahl negativ ist. Ich suche den einfachsten Weg , also wäre eine vordefinierte Javascript-Funktion die beste, aber ich habe noch nichts gefunden. Ich habe bisher das gefunden, aber ich denke nicht, dass dies ein guter Weg ist :

  function negative(number) { 
        if (number.match(/^-\d+$/)) {
            return true;
        } else {
            return false;
        }
   }
51
Adam

Anstatt eine Funktion für diese Prüfung zu schreiben, sollten Sie diesen Ausdruck einfach verwenden können:

(number < 0)

Javascript wertet diesen Ausdruck aus, indem er zunächst versucht, die linke Seite in einen Zahlenwert umzuwandeln, bevor er überprüft wird, ob er kleiner als Null ist. Dies scheint das zu sein, was Sie wollten.


Spezifikationen und Details

Das Verhalten für x < y ist in §11.8.1 Der Less-than-Operator (<) angegeben, der §11.8.5 Der abstrakte Vergleichsalgorithmus verwendet.

Die Situation ist sehr unterschiedlich, wenn sowohl x als auch y Zeichenfolgen sind. Da die rechte Seite jedoch bereits eine Zahl in (number < 0) ist, versucht der Vergleich, die linke Seite in eine Zahl zu konvertieren, die numerisch verglichen werden soll. Wenn die linke Seite nicht in eine Zahl umgewandelt werden kann, lautet das Ergebnis false.

Beachten Sie, dass dies im Vergleich zu Ihrem auf Regex basierenden Ansatz zu unterschiedlichen Ergebnissen führen kann. Abhängig davon, was Sie tun möchten, kann es ohnehin das Richtige tun.

  • "-0" < 0 ist false, was mit der Tatsache übereinstimmt, dass -0 < 0 auch false ist (siehe: mit Vorzeichen versehene Null ).
  • "-Infinity" < 0 ist true (unendlich wird bestätigt)
  • "-1e0" < 0 ist true (wissenschaftliche Literale werden akzeptiert)
  • "-0x1" < 0 ist true (Hexadezimal-Literale werden akzeptiert)
  • " -1 " < 0 ist true (einige Formen von Leerzeichen sind zulässig)

Für jedes der obigen Beispiele würde die Regex-Methode das Gegenteil auswerten (true statt false und umgekehrt).

Verweise

Siehe auch


Anhang 1: Bedingter Operator ?:

Es sollte auch gesagt werden, dass Aussagen dieser Form:

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

kann geändert werden, um den ternären/bedingten ?:-Operator ( §11.12 ) zu verwenden, um einfach:

return (someCondition) ? valueForTrue : valueForFalse;

Idiomatische Verwendung von ?: kann den Code übersichtlicher und lesbarer machen.

Verwandte Fragen


Anhang 2: Typumwandlungsfunktionen

Javascript verfügt über Funktionen, die Sie aufrufen können, um verschiedene Typkonvertierungen durchzuführen.

Etwas wie das Folgende:

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

Kann mit dem ?:-Operator in folgende Funktionen umgewandelt werden:

return (someVariable ? true : false);

Sie können dies aber auch weiter vereinfachen, um:

return Boolean(someVariable);

Dies ruft Boolean als Funktion ( §15.16.1 ) auf, um die gewünschte Typkonvertierung durchzuführen. Sie können ebenfalls Number als Funktion ( §15.17.1 ) aufrufen, um eine Konvertierung in eine Nummer durchzuführen.

Verwandte Fragen

264
function negative(n) {
  return n < 0;
}

Ihr Regex sollte für String-Nummern gut funktionieren, aber das ist wahrscheinlich schneller. (bearbeitet von Kommentar in ähnlicher Antwort oben, Konvertierung mit +n ist nicht erforderlich.)

11
bcherry

Wie wäre es mit etwas so einfachem wie:

function negative(number){
    return number < 0;
}

Der * 1-Teil dient zum Konvertieren von Zeichenfolgen in Zahlen.

3
Wolph

Dies ist eine alte Frage, aber sie hat viele Ansichten, daher denke ich, dass es wichtig ist, sie zu aktualisieren. 

ECMAScript 6 brachte die Funktion Math.sign() mit, die das Vorzeichen einer Zahl zurückgibt (1, wenn sie positiv ist, -1, wenn sie negativ ist) oder NaN, wenn es keine Zahl ist. Referenz

Sie könnten es verwenden als:

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");
}

In ES6 können Sie mithilfe der Math.sign-Funktion feststellen, ob

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
JTeam