Wie kann ich überprüfen, ob eine Variable derzeit ein ganzzahliger Typ ist? Ich habe nach einer Ressource dafür gesucht und denke, dass der Operator === wichtig ist, aber ich bin nicht sicher, wie ich überprüfen soll, ob eine Variable eine Ganzzahl (oder ein Array für diese Angelegenheit) ist.
javascript
types
sova
quelle
quelle
Antworten:
Eine Variable wird in JavaScript niemals ein ganzzahliger Typ sein - sie unterscheidet nicht zwischen verschiedenen Arten von Zahlen.
Sie können testen, ob die Variable eine Zahl enthält und ob diese Zahl eine Ganzzahl ist.
(typeof foo === "number") && Math.floor(foo) === foo
Wenn die Variable eine Zeichenfolge sein kann, die eine Ganzzahl enthält, und Sie sehen möchten, ob dies der Fall ist:
foo == parseInt(foo, 10)
quelle
In diesen Tagen ist ECMAScript 6 (ECMA-262) "im Haus". Verwenden
Number.isInteger(x)
Sie diese Option , um die Frage zu stellen, die Sie in Bezug auf den Typ von x stellen möchten:js> var x = 3 js> Number.isInteger(x) true js> var y = 3.1 js> Number.isInteger(y) false
quelle
Eine Zahl ist eine ganze Zahl, wenn ihr Modulo% 1 0- ist.
function isInt(n){ return (typeof n== 'number' && n%1== 0); }
Dies ist nur so gut, wie Javascript bis zum 15. + - zehn bekommt.
isInt(Math.pow(2,50)+.1)
kehrt zurücktrue
, wie es tutMath.pow(2,50)+.1 == Math.pow(2,50)
quelle
Ich weiß, dass Sie an ganzzahligen Zahlen interessiert sind, daher werde ich darauf nicht antworten. Wenn Sie jedoch jemals nach Gleitkommazahlen suchen wollten, können Sie dies tun.
function isFloat( x ) { return ( typeof x === "number" && Math.abs( x % 1 ) > 0); }
Hinweis: Dies kann Zahlen, die mit
.0
(oder einer logisch äquivalenten Anzahl von0
) enden, als INTEGER behandeln. In diesem Fall muss tatsächlich ein Gleitkomma-Genauigkeitsfehler auftreten, um die Gleitkommawerte zu erkennen.Ex.
alert(isFloat(5.2)); //returns true alert(isFloat(5)); //returns false alert(isFloat(5.0)); //return could be either true or false
quelle
Nicht wenige Dienstprogrammbibliotheken wie YourJS bieten Funktionen zum Bestimmen, ob es sich bei einem Array um ein Array handelt oder ob es sich bei etwas um eine Ganzzahl oder um viele andere Typen handelt. YourJS definiert isInt, indem überprüft wird, ob der Wert eine Zahl ist und ob er durch 1 teilbar ist:
function isInt(x) { return typeOf(x, 'Number') && x % 1 == 0; }
Das obige Snippet wurde diesem YourJS-Snippet entnommen und funktioniert daher nur, weil
typeOf
es von der Bibliothek definiert wird. Sie können eine minimalistische Version von YourJS herunterladen , die in erster Linie nur die Typprüfung Funktionen wie hattypeOf()
,isInt()
undisArray()
: http://yourjs.com/snippets/build/34,2quelle
Sie können sich auch Runtyper ansehen - ein Tool, das die Typprüfung von Operanden in
===
(und anderen Operationen) durchführt.Wenn Sie in Ihrem Beispiel einen strengen Vergleich haben
x === y
undx = 123, y = "123"
, wird automatischtypeof x, typeof y
eine Warnung in der Konsole überprüft und angezeigt:quelle
Versuchen Sie diesen Code:
alert(typeof(1) == "number");
quelle
Ein sauberer Ansatz
Sie können eine sehr kleine, abhängigkeitsfreie Bibliothek wie Not verwenden . Löst alle Probleme:
// at the basic level it supports primitives let number = 10 let array = [] not('number', 10) // returns false not('number', []) // throws error // so you need to define your own: let not = Object.create(Not) not.defineType({ primitive: 'number', type: 'integer', pass: function(candidate) { // pre-ECMA6 return candidate.toFixed(0) === candidate.toString() // ECMA6 return Number.isInteger(candidate) } }) not.not('integer', 4.4) // gives error message not.is('integer', 4.4) // returns false not.is('integer', 8) // returns true
Wenn Sie es sich zur Gewohnheit machen, wird Ihr Code viel stärker. Typoskript löst einen Teil des Problems, funktioniert aber zur Laufzeit nicht, was ebenfalls wichtig ist.
function test (string, boolean) { // any of these below will throw errors to protect you not('string', string) not('boolean', boolean) // continue with your code. }
quelle