Bin ich der einzige, der dies gelesen hat und festgestellt hat, dass keine der Antworten den "ganzzahligen" Teil der Frage betrifft?
Das Problem
var myInteger = 6;
var myFloat = 6.2;
if( myInteger > 0 )
if( myFloat > 0 )
Die Lösung
Um sicherzustellen, dass es sich um eine Ganzzahl handelt, möchten Sie Ihren Wert in eine Ganzzahl umwandeln und dann mit sich selbst vergleichen.
if( parseInt( myInteger ) == myInteger && myInteger > 0 )
if( parseInt( myFloat ) == myFloat && myFloat > 0 )
Einige nette Optimierungen
Als Bonus gibt es einige Verknüpfungen zum Konvertieren von einem Float in eine Ganzzahl in JavaScript . In JavaScript sind alle Bit - Operatoren ( |, ^, &, usw.) Ihre Zahl auf eine ganze Zahl gegossen vor dem Betrieb. Ich gehe davon aus, dass 99% der Entwickler den IEEE-Gleitkomma-Standard nicht kennen und schrecklich verwirrt wären, wenn "200 | 2" auf 400 (ish) ausgewertet würde. Diese Verknüpfungen werden in der Regel schneller als Math.flooroder ausgeführt parseIntund benötigen weniger Byte, wenn Sie versuchen, den kleinstmöglichen Code herauszuholen:
if( myInteger | 0 == myInteger && myInteger > 0 )
if( myFloat | 0 == myFloat && myFloat > 0 )
Aber warte, da ist noch mehr!
Diese bitweisen Operatoren arbeiten mit 32-Bit-Ganzzahlen mit Vorzeichen. Dies bedeutet, dass das höchste Bit das Vorzeichenbit ist. Wenn Sie das Vorzeichenbit auf Null setzen, bleibt Ihre Zahl nur dann unverändert , wenn sie positiv war . Sie können dies verwenden, um mit einem einzigen Schlag die Positivität UND Integrität zu überprüfen:
if( (myInteger & 2147483647) == myInteger )
if( (myFloat & 2147483647) == myFloat )
* note bit AND operation is wrapped with parenthesis to make it work in chrome (console)
Wenn Sie Probleme haben, sich an diese verschlungene Zahl zu erinnern, können Sie sie auch vorher als solche berechnen:
var specialNumber = ~(1 << 31);
Auf Negative prüfen
Gemäß dem Kommentar von @ Reinsbrain kann ein ähnlicher bitweiser Hack verwendet werden, um nach einer negativen Ganzzahl zu suchen . In einer negativen Zahl, wir tun wollen , dass die am weitesten links gelegene Bit a 1, um so durch diesen Bit auf 1 zwingen die Zahl bleibt nur unverändert , wenn sie negativ zu beginnen sind:
if( (myInteger | -2147483648) == myInteger )
if( (myFloat | -2147483648) == myFloat )
Diese spezielle Zahl ist noch einfacher zu berechnen:
var specialNumber = 1 << 31;
Randfälle
Wie bereits erwähnt, schlagen Zahlen, die nicht in 32-Bit (mehr als ~ 2 Milliarden) passen, fehl, da bitweise JavaScript-Operatoren in 32-Bit-Ganzzahlen konvertieren
Sie können auf die längere Lösung für diese zurückgreifen:
if( parseInt(123456789000) == 123456789000 && 123456789000 > 0 )
Selbst diese Lösung schlägt jedoch irgendwann fehl, da parseIntihre Genauigkeit für große Zahlen begrenzt ist. Versuchen Sie Folgendes und sehen Sie, was passiert:
parseInt(123123123123123123123);
Auf meinem Computer in der Chrome-Konsole wird Folgendes ausgegeben: 123123123123123130000
Der Grund dafür ist, dass parseInt die Eingabe wie einen 64-Bit-IEEE-Float behandelt. Dies liefert nur 52 Bits für die Mantisse, was einen Maximalwert von ~ 4,5e15 bedeutet, bevor sie mit dem Runden beginnt