Start · Sprachen · JavaScript · Referenz · Math.sign()

Math.sign()

Methode

Die statische Methode <code>Math.sign()</code> gibt das Vorzeichen einer Zahl zurück: <code>1</code>, <code>-1</code>, <code>0</code>, <code>-0</code> oder <code>NaN</code>.

seit JavaScript ES2015 Kategorie: method-property

Signatur

Math.sign(x)

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

Typ
number
Beschreibung
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));
1 -1 0 -0 -1 NaN -1

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 });
nach unten (bei Scrollbewegung nach unten)

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));
▲ 4.50 ▼ -7.75 ■ 0.00

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));
4 -4

// Wichtig · Fallstricke

  • -0 beachten: Math.sign(-0) liefert -0. Mit === ist -0 === 0 wahr; zur Unterscheidung braucht man Object.is(Math.sign(x), -0).
  • NaN abfangen: Bei ungültigen Eingaben kommt NaN zurück. Vergleiche wie Math.sign(x) === 0 schlagen dann still fehl; prüfe bei Bedarf vorher mit Number.isNaN().
  • Implizite Umwandlung: Math.sign(null) ergibt 0, Math.sign('') ebenfalls 0, Math.sign([]) auch. Das kann Fehler in der Eingabevalidierung verdecken.
  • BigInt: Math.sign(10n) wirft einen TypeError. 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.