Movatterモバイル変換


[0]ホーム

URL:


  1. Web
  2. JavaScript
  3. JavaScript-Referenz
  4. Eingebaute Standardobjekte
  5. NaN

Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.

View in EnglishAlways switch to English

NaN

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨Juli 2015⁩.

DieNaN globale Eigenschaft ist ein Wert, der „Nicht eine Zahl“ (Not-a-Number) darstellt.

Probieren Sie es aus

function sanitize(x) {  if (isNaN(x)) {    return NaN;  }  return x;}console.log(sanitize("1"));// Expected output: "1"console.log(sanitize("NotANumber"));// Expected output: NaN

Wert

Der gleiche Zahlenwert wieNumber.NaN.

Eigenschaften vonNaN
Schreibbarnein
Aufzählbarnein
Konfigurierbarnein

Beschreibung

NaN ist eine Eigenschaft desglobalen Objekts. In anderen Worten, es ist eine Variable im globalen Bereich.

In modernen Browsern istNaN eine nicht konfigurierbare, nicht beschreibbare Eigenschaft. Auch wenn dies nicht der Fall ist, vermeiden Sie es, sie zu überschreiben.

Es gibt fünf verschiedene Typen von Operationen, dieNaN zurückgeben:

  • Fehlgeschlagene Zahlenkonvertierung (z. B. explizite wieparseInt("blabla"),Number(undefined) oder implizite wieMath.abs(undefined))
  • Mathematische Operation, deren Ergebnis keine reale Zahl ist (z. B.Math.sqrt(-1))
  • Unbestimmte Form (z. B.0 * Infinity,1 ** Infinity,Infinity / Infinity,Infinity - Infinity)
  • Eine Methode oder ein Ausdruck, dessen OperandenNaN sind oder zuNaN gezwungen werden (z. B.7 ** NaN,7 * "blabla") – das bedeutet,NaN ist ansteckend
  • Andere Fälle, in denen ein ungültiger Wert als Zahl dargestellt werden soll (z. B. ein ungültigesDatum (Date)new Date("blabla").getTime(),"".charCodeAt(1))

NaN und sein Verhalten wurden nicht von JavaScript erfunden. Seine Semantik in der Gleitkommaarithmetik (einschließlich dassNaN !== NaN) ist durchIEEE 754 spezifiziert. Zu den Verhaltensweisen vonNaN gehören:

  • WennNaN an einer mathematischen Operation beteiligt ist (aber nicht beibitweisen Operationen), ist das Ergebnis normalerweise auchNaN. (SieheGegenbeispiel unten.)
  • WennNaN einer der Operanden eines Vergleichs der relationalen Größenordnung (>,<,>=,<=) ist, ist das Ergebnis immerfalse.
  • NaN vergleicht ungleich (über==,!=,=== und!==) mit jedem anderen Wert – einschließlich eines anderenNaN-Werts.

NaN ist auch einer derfalsy Werte in JavaScript.

Beispiele

Testen gegen NaN

Um festzustellen, ob ein WertNaN ist, verwenden SieNumber.isNaN() oderisNaN(), um am deutlichsten zu bestimmen, ob ein WertNaN ist — oder, daNaN der einzige Wert ist, der ungleich zu sich selbst ist, können Sie einen Selbstvergleich wiex !== x durchführen.

js
NaN === NaN; // falseNumber.NaN === NaN; // falseisNaN(NaN); // trueisNaN(Number.NaN); // trueNumber.isNaN(NaN); // truefunction valueIsNaN(v) {  return v !== v;}valueIsNaN(1); // falsevalueIsNaN(NaN); // truevalueIsNaN(Number.NaN); // true

Beachten Sie jedoch den Unterschied zwischenisNaN() undNumber.isNaN(): Ersteres gibttrue zurück, wenn der Wert momentanNaN ist oderNaN wird, nachdem es zu einer Zahl gezwungen wurde, während Letzteres nur danntrue zurückgibt, wenn der Wert momentanNaN ist:

js
isNaN("hello world"); // trueNumber.isNaN("hello world"); // false

Aus dem gleichen Grund führt die Verwendung eines BigInt-Werts zu einem Fehler mitisNaN() und nicht mitNumber.isNaN():

js
isNaN(1n); // TypeError: Conversion from 'BigInt' to 'number' is not allowed.Number.isNaN(1n); // false

Zusätzlich können einige Array-MethodenNaN nicht finden, während andere dies können. Namentlich die Methoden zum Finden von Indizes (indexOf(),lastIndexOf()) könnenNaN nicht finden, während die Methoden zum Finden von Werten (includes()) dies können:

js
const arr = [2, 4, NaN, 12];arr.indexOf(NaN); // -1arr.includes(NaN); // true// Methods accepting a properly defined predicate can always find NaNarr.findIndex((n) => Number.isNaN(n)); // 2

Für weitere Informationen überNaN und dessen Vergleich sieheVergleich von Gleichheit und Identität.

Beobachtbar unterschiedliche NaN-Werte

Es ist möglich, zwei Gleitkommazahlen mit unterschiedlichen Binärdarstellungen zu erzeugen, die beideNaN sind, denn in derIEEE 754 Kodierung ist jede Gleitkommazahl mit Exponent0x7ff und einer nicht-null MantisseNaN. In JavaScript können Sie Bit-Ebene-Manipulationen mittypisierten Arrays durchführen.

js
const f2b = (x) => new Uint8Array(new Float64Array([x]).buffer);const b2f = (x) => new Float64Array(x.buffer)[0];// Get a byte representation of NaNconst n = f2b(NaN);const m = f2b(NaN);// Change the sign bit, which doesn't matter for NaNn[7] += 2 ** 7;// n[0] += 2**7; for big endian processorsconst nan2 = b2f(n);console.log(nan2); // NaNconsole.log(Object.is(nan2, NaN)); // trueconsole.log(f2b(NaN)); // Uint8Array(8) [0, 0, 0, 0, 0, 0, 248, 127]console.log(f2b(nan2)); // Uint8Array(8) [0, 0, 0, 0, 0, 0, 248, 255]// Change the first bit, which is the least significant bit of the mantissa and doesn't matter for NaNm[0] = 1;// m[7] = 1; for big endian processorsconst nan3 = b2f(m);console.log(nan3); // NaNconsole.log(Object.is(nan3, NaN)); // trueconsole.log(f2b(NaN)); // Uint8Array(8) [0, 0, 0, 0, 0, 0, 248, 127]console.log(f2b(nan3)); // Uint8Array(8) [1, 0, 0, 0, 0, 0, 248, 127]

Still entkommendes NaN

NaN breitet sich durch mathematische Operationen aus, daher reicht es in der Regel aus, am Ende der Berechnung einmal aufNaN zu testen, um Fehlerbedingungen zu erkennen. Der einzige Fall, in demNaN unbemerkt entkommt, ist bei der Verwendung vonPotenzierung mit einem Exponenten von0, was sofort1 zurückgibt, ohne den Wert der Basis zu testen.

js
NaN ** 0 === 1; // true

Spezifikationen

Specification
ECMAScript® 2026 Language Specification
# sec-value-properties-of-the-global-object-nan

Browser-Kompatibilität

Siehe auch

Help improve MDN

Learn how to contribute Diese Seite wurde automatisch aus dem Englischen übersetzt.

[8]ページ先頭

©2009-2025 Movatter.jp