2014-05-02 11 views
61

In Typoskript ist, zeigt dies eine Fehlermeldung, isNaN In Typoskript, Wie kann man prüfen, ob ein String Numeric

isNaN('9BX46B6A') 

nur numerische Werte

akzeptiert und diese gibt false zurück, weil parseFloat('9BX46B6A') zu 9

isNaN(parseFloat('9BX46B6A')) 

bewertet Ich kann immer noch mit dem Fehler laufen in Visual Studio laufen, aber ich möchte es richtig machen.

Derzeit habe ich diese geänderte Funktion geschrieben -

static isNaNModified = (inputStr: string) => { 
    var numericRepr = parseFloat(inputStr); 
    return isNaN(numericRepr) || numericRepr.toString().length != inputStr.length; 
} 
+0

Mögliche Duplikat von [ TypeScript Konvertiert einen String in eine Zahl] (http://stackoverflow.com/questions/14667713/typescript-converting-a-string-to-a-number) –

Antwort

122

Die Methode zum Umwandeln einer Zeichenfolge in eine Zahl ist Number, nicht .

Number('1234') // 1234 
Number('9BX9') // NaN 

Sie können auch den unäre Plus-Operator verwenden, wenn Sie eine Abkürzung mögen:

+'1234' // 1234 
+'9BX9' // NaN 

Seien Sie vorsichtig, wenn sie gegen NaN Überprüfung (den Bediener === und !== nicht wie bei NaN erwartet funktionieren). Verwendung:

isNaN(maybeNumber) // returns true if NaN, otherwise false 
+8

bedeutet das, dass dies tun: if (isNaN (+ possibleNumberString)) ist eine gültige Art der Überprüfung? –

+0

Warum würden Sie "Number" über "parseInt" oder "parseFloat" verwenden? 'Zahl ('')' gibt 0, während 'parseInt ('')' 'NaN 'gibt, was eher dem entspricht, was ich erwarte. – Didii

+1

Wie in der ursprünglichen Frage * erwähnt, wird 'parseInt ('9BX9')' (und 'parseFloat ('9BX9')') '9', nicht' NaN' zurückgeben. Wenn Sie die Umwandlung einer leeren Zeichenfolge in 0 nicht wünschen, überprüfen Sie explizit zuerst die leere Zeichenfolge. –

-1

, ob eine Zeichenfolge analysiert werden kann als eine Zahl ein Laufzeit Anliegen ist. Typescript unterstützt diese Verwendung nicht, da es auf die Sicherheit der Kompilierungszeit (nicht der Laufzeit) ausgerichtet ist.

+4

Es ist genug Sorge um es als einen Fehler zu markieren, als ob es vorschlägt, dass es nicht korrekt ist. –

19

Ich löste es durch Verwendung des isNumeric Betreiber von rxjs Bibliothek (Import rxjs/util/isNumeric

0

Verwendung

parseFloat(value).toString() == value 
Verwandte Themen