Signatur
Beschreibung
Math.sign() zeigt an, ob eine Zahl positiv, negativ oder null ist. Positive Zahlen ergeben 1, negative -1. Bei 0 und -0 wird der Wert unverändert zurückgegeben, und alles, was sich nicht in eine Zahl umwandeln lässt, ergibt NaN.
Da sign() eine statische Methode von Math ist, ruft man sie immer als Math.sign() auf. Math ist kein Konstruktor, von dem man Instanzen erzeugen könnte.
Nützlich ist die Methode immer dann, wenn nur die Richtung eines Werts zählt und nicht sein Betrag, zum Beispiel bei Scroll- oder Mausraddeltas, der Bewegungsrichtung in Spielen, Trendanzeigen (steigend/fallend) oder in Vergleichsfunktionen für Array.prototype.sort(). Zusammen mit Math.abs() lässt sich jede Zahl in Vorzeichen und Betrag zerlegen: x === Math.sign(x) * Math.abs(x).
Das Argument wird vorher implizit in eine Zahl umgewandelt (wie bei Number(x)). Strings wie "-3" funktionieren deshalb, "foo" oder undefined ergeben dagegen NaN.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $x Pflicht | number | Die Zahl, deren Vorzeichen bestimmt werden soll. Andere Typen werden vorher mit Number()-Semantik in eine Zahl umgewandelt. |
Rückgabewert
1 bei positivem x, -1 bei negativem x, 0 bzw. -0 bei positiver bzw. negativer Null, sonst NaN.Beispiele
Grundlegende Rückgabewerte
console.log(Math.sign(42)); // positiv
console.log(Math.sign(-7.5)); // negativ
console.log(Math.sign(0)); // Null
console.log(Math.sign(-0)); // negative Null
console.log(Math.sign('-3')); // String wird umgewandelt
console.log(Math.sign('abc')); // nicht umwandelbar
console.log(Math.sign(-Infinity));
Scrollrichtung aus dem Mausrad ermitteln
const onWheel = (event) => {
// deltaY kann je nach Gerät stark schwanken – nur die Richtung zählt
const direction = Math.sign(event.deltaY);
if (direction === 1) console.log('nach unten');
else if (direction === -1) console.log('nach oben');
};
window.addEventListener('wheel', onWheel, { passive: true });
Trendanzeige für Kursänderungen
const arrows = { '1': '▲', '-1': '▼', '0': '■' };
const trend = (alt, neu) => {
const s = Math.sign(neu - alt);
// -0 wird als Objektschlüssel zu '0'
return `${arrows[s]} ${(neu - alt).toFixed(2)}`;
};
console.log(trend(100, 104.5));
console.log(trend(80, 72.25));
console.log(trend(50, 50));
Wert auf ganze Schritte Richtung Null runden
// Entspricht Math.trunc, zeigt aber das Zusammenspiel von sign und abs
const truncate = (x) => Math.sign(x) * Math.floor(Math.abs(x));
console.log(truncate(4.8));
console.log(truncate(-4.8));
// Wichtig · Fallstricke
- -0 beachten:
Math.sign(-0)liefert-0. Mit===ist-0 === 0wahr; zur Unterscheidung braucht manObject.is(Math.sign(x), -0). - NaN abfangen: Bei ungültigen Eingaben kommt
NaNzurück. Vergleiche wieMath.sign(x) === 0schlagen dann still fehl; prüfe bei Bedarf vorher mitNumber.isNaN(). - Implizite Umwandlung:
Math.sign(null)ergibt0,Math.sign('')ebenfalls0,Math.sign([])auch. Das kann Fehler in der Eingabevalidierung verdecken. - BigInt:
Math.sign(10n)wirft einenTypeError. Für BigInt vergleicht man direkt, z. B.(n > 0n) - (n < 0n). - Kompatibilität: ES2015, in allen modernen Browsern und Node.js verfügbar; nur der Internet Explorer braucht ein Polyfill.