@Joel的答案非常接近,但在以下情况下将失败:
// Whitespace strings:IsNumeric(' ') == true;IsNumeric('tt') == true;IsNumeric('nr') == true;// Number literals:IsNumeric(-1) == false;IsNumeric(0) == false;IsNumeric(1.1) == false;IsNumeric(8e5) == false;前段时间,我必须实现一个
IsNumeric函数,以查明变量是否包含数值, 无论其类型如何
,它都可能是
String包含数值(我还必须考虑指数符号等),
Number对象,几乎任何东西都可以传递给该函数,我不能做任何类型假设,要注意类型强制(例如,
+true== 1;但
true不应视为
"numeric")。
分享通过的测试:
function isNumeric(n) { return !isNaN(parseFloat(n)) && isFinite(n);}由于强制转换为数字,因此PS的行为令人困惑。在ES6中,Number.isNaN和Number.isFinite将解决这些问题。使用它们时请记住这一点。
这是jQuery现在的方式(2.2稳定):
isNumeric: function(obj) { var realStringObj = obj && obj.toString(); return !jQuery.isArray(obj) && (realStringObj - parseFloat(realStringObj) + 1) >= 0;}更新 : Angular4.3:
export function isNumeric(value: any): boolean { return !isNaN(value - parseFloat(value));}


