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;
}
}
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.
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).
<
)?:
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.
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.
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.)
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.
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