In Typescript zeigt dies einen Fehler an, der besagt, dass isNaN nur numerische Werte akzeptiert
isNaN('9BX46B6A')
und dies gibt false zurück, weil zu parseFloat('9BX46B6A')
ausgewertet wird9
isNaN(parseFloat('9BX46B6A'))
Ich kann immer noch mit dem Fehler arbeiten, der in Visual Studio angezeigt wird, aber ich würde es gerne richtig machen.
Derzeit habe ich diese modifizierte Funktion geschrieben -
static isNaNModified = (inputStr: string) => {
var numericRepr = parseFloat(inputStr);
return isNaN(numericRepr) || numericRepr.toString().length != inputStr.length;
}
typescript
user3509546
quelle
quelle
Antworten:
Die Konvertierung einer Zeichenfolge in eine Zahl erfolgt mit
Number
, nicht mitparseFloat
.Sie können auch den unären Plus-Operator verwenden, wenn Sie die Kurzform mögen:
Seien Sie vorsichtig, wenn Sie gegen NaN prüfen (der Bediener
===
und arbeiten!==
Sie nicht wie erwartet mitNaN
). Verwenden:quelle
Number
obenparseInt
oder verwendenparseFloat
?Number('')
gibt 0, währendparseInt('')
gibt,NaN
was mehr im Einklang mit dem steht, was ich erwarte.parseInt('9BX9')
(undparseFloat('9BX9')
)9
nicht zurückkehrenNaN
. Wenn Sie nicht möchten, dass eine leere Zeichenfolge in 0 konvertiert wird, suchen Sie zuerst explizit nach einer leeren Zeichenfolge.isNaN(Number(what_ever))
anstelle vonNumber(what_ever) === Nan
.Number
ist keine TypeScript-Sache, sondern eine integrierte EcmaScript-Konstruktorfunktion, die einen Wert akzeptiert und ein Zahlenprimitiv zurückgibt, wenn sie als Funktion und nicht als Konstruktor aufgerufen wird.Update 2
Diese Methode ist in rxjs v6 nicht mehr verfügbar
Ich habe es gelöst, indem ich den isNumeric- Operator aus der rxjs- Bibliothek verwendet habe (Importieren von rxjs / util / isNumeric)
Aktualisieren
import { isNumeric } from 'rxjs/util/isNumeric';
. . .
quelle
quelle
Ich würde eine vorhandene und bereits getestete Lösung wählen. Zum Beispiel dies von rxjs in Typoskript:
rxjs / isNumeric.ts
Ohne die Funktion rxjs isArray () und mit einfachen Eingaben:
Sie sollten solche Funktionen immer mit Ihren Anwendungsfällen testen. Wenn Sie spezielle Werttypen haben, ist diese Funktion möglicherweise nicht Ihre Lösung. Hier können Sie die Funktion testen.
Ergebnisse sind:
Wie Sie sehen, müssen Sie vorsichtig sein, wenn Sie diese Funktion mit Aufzählungen verwenden.
quelle
Einfache Antwort: (auf leer & null achten)
https://codepen.io/CQCoder/pen/zYGEjxd?editors=1111
quelle
Die meiste Zeit ist der Wert, den wir überprüfen möchten, Zeichenfolge oder Zahl, also hier ist die Funktion, die ich benutze:
Codesandbox-Tests .
quelle
Sie können die
Number.isFinite()
Funktion verwenden:Hinweis: Es gibt einen signifikanten Unterschied zwischen der globalen Funktion
isFinite()
und der letzterenNumber.isFinite()
. Im ersteren Fall wird ein Saitenzwang durchgeführt - alsoisFinite('0') === true
währendNumber.isFinite('0') === false
.Beachten Sie auch, dass dies im IE nicht verfügbar ist!
quelle
Für vollständige Zahlen (Nicht-Floats) in Angular können Sie Folgendes verwenden:
if (Number.isInteger(yourVariable)) { ... }
quelle
Number.isInteger
sagt dir nur, obyourVariable
, was bereits einnumber
Typ ist, eine ganze Zahl ist. Funktioniert nicht mit Strings. SoNumber.isInteger(Number(yourVariable))
könnte den Trick tun.Ob eine Zeichenfolge als Zahl analysiert werden kann, ist ein Laufzeitproblem. Typescript unterstützt diesen Anwendungsfall nicht, da es sich auf die Sicherheit bei der Kompilierung (nicht zur Laufzeit) konzentriert.
quelle