有人知道如何在JavaScript中检查变量是数字还是字符串吗?


当前回答

或者只使用isNaN()的倒数:

if(!isNaN(data))
  do something with the number
else
  it is a string

是的,使用jQuery的$. isnumeric()更有趣。

其他回答

function IsNumeric(num) {
    return ((num >=0 || num < 0)&& (parseInt(num)==num) );
}

最好的方法是使用isNaN +类型转换:

更新的all-in方法:

function isNumber(n) { return !isNaN(parseFloat(n)) && !isNaN(n - 0) }

使用regex也一样:

function isNumber(n) { return /^-?[\d.]+(?:e-?\d+)?$/.test(n); } 

------------------------

isNumber('123'); // true  
isNumber('123abc'); // false  
isNumber(5); // true  
isNumber('q345'); // false
isNumber(null); // false
isNumber(undefined); // false
isNumber(false); // false
isNumber('   '); // false

注意那种类型的NaN是…“数量”

typeof NaN === 'number'; // true

像其他人一样,我沉迷于强类型(即使我喜欢JS)

在我的代码中,我碰巧需要区分数字和字符串,来执行两种截然不同的操作。

而不是高谈阔论:

让int = 123, STR = '123'; console.log (int。构造函数===Number, str.constructor===String);// true true Console.log (typeof int === 'number', typeof STR === 'number');// true false console.log (Number(int)== int, Number(str)===str) // true false //或 console.log (String(int)== int, String(str)===str) // false true //最短的: Console.log (+int== int, +str== str);// true false

因此我主要使用,特别是在三元测试中。

let res = (+X===X) ? stuff_to_do_with_a_Number(X) : stuff_to_do_with_a_String(X);

当然,这必须小心处理。

聚会很晚才来;然而,当我想一次性检查某些输入是字符串还是数字时,下面的方法总是很有效。

return !!Object.prototype.toString.call(input).match(/\[object (String|Number)\]/);