Ich hoffe, dass es etwas gibt, das sich im gleichen konzeptionellen Rahmen bewegt wie das alte VB6 IsNumeric()
Funktion?
Antworten
Zu viele Anzeigen?Falls jemand jemals so weit kommt, ich habe einige Zeit damit verbracht, moment.js zu patchen ( https://github.com/moment/moment ). Hier ist etwas, das ich daraus mitgenommen habe:
function isNumeric(val) {
var _val = +val;
return (val !== val + 1) //infinity check
&& (_val === +val) //Cute coercion check
&& (typeof val !== 'object') //Array/object check
}
Behandelt die folgenden Fälle:
Stimmt:
isNumeric("1"))
isNumeric(1e10))
isNumeric(1E10))
isNumeric(+"6e4"))
isNumeric("1.2222"))
isNumeric("-1.2222"))
isNumeric("-1.222200000000000000"))
isNumeric("1.222200000000000000"))
isNumeric(1))
isNumeric(0))
isNumeric(-0))
isNumeric(1010010293029))
isNumeric(1.100393830000))
isNumeric(Math.LN2))
isNumeric(Math.PI))
isNumeric(5e10))
Falsch! :
isNumeric(NaN))
isNumeric(Infinity))
isNumeric(-Infinity))
isNumeric())
isNumeric(undefined))
isNumeric('[1,2,3]'))
isNumeric({a:1,b:2}))
isNumeric(null))
isNumeric([1]))
isNumeric(new Date()))
Ironischerweise ist es diejenige, mit der ich am meisten zu kämpfen habe:
isNumeric(new Number(1)) => false
Alle Vorschläge sind willkommen. :]
Es hängt also von den Testfällen ab, die Sie damit bearbeiten wollen.
function isNumeric(number) {
return !isNaN(parseFloat(number)) && !isNaN(+number);
}
Was ich suchte, war regelmäßige Arten von Zahlen in Javascript. 0, 1 , -1, 1.1 , -1.1 , 1E1 , -1E1 , 1e1 , -1e1, 0.1e10, -0.1.e10 , 0xAF1 , 0o172, Math.PI, Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY
Und auch sie sind Darstellungen als Strings:
'0', '1', '-1', '1.1', '-1.1', '1E1', '-1E1', '1e1', '-1e1', '0.1e10', '-0.1.e10', '0xAF1', '0o172'
Ich wollte sie auslassen und nicht als numerisch kennzeichnen '', ' ', [], {}, null, undefined, NaN
Bis heute scheinen alle anderen Antworten einen dieser Testfälle nicht bestanden zu haben.
Ersparen Sie sich die Suche nach einer "eingebauten" Lösung.
Es gibt keine gute Antwort, und die Antwort, die in diesem Thread am häufigsten geäußert wurde, ist falsch.
npm install is-number
In JavaScript ist es nicht immer so einfach wie es sein sollte, zuverlässig zu prüfen, ob ein Wert eine Zahl ist. Es ist üblich, dass Entwickler +, - oder Number() verwenden, um einen String-Wert in eine Zahl umzuwandeln (z. B. wenn Werte von Benutzereingaben, Regex-Matches, Parsern usw. zurückgegeben werden). Aber es gibt viele nicht-intuitive Randfälle, die zu unerwarteten Ergebnissen führen:
console.log(+[]); //=> 0
console.log(+''); //=> 0
console.log(+' '); //=> 0
console.log(typeof NaN); //=> 'number'