有人知道如何在JavaScript中检查变量是数字还是字符串吗?
当前回答
自ES2015以来,检查变量的正确方法 是number . isfinite (value)
例子:
Number.isFinite(Infinity) // false
Number.isFinite(NaN) // false
Number.isFinite(-Infinity) // false
Number.isFinite(0) // true
Number.isFinite(2e64) // true
Number.isFinite('0') // false
Number.isFinite(null) // false
其他回答
Typeof在大多数情况下都很适合我。您可以尝试使用if语句
if(typeof x === 'string' || typeof x === 'number') {
console.log("Your statement");
}
x是任意变量名
我发现的最好的方法是检查字符串上的方法,即:
if (x.substring) {
// do string thing
} else{
// do other thing
}
或者如果你想对number属性做一些检查,
if (x.toFixed) {
// do number thing
} else {
// do other thing
}
这有点像“鸭子打字”,由你自己决定哪种方式最有意义。我没有足够的因果报应来评论,但typeof失败的盒装字符串和数字,即:
alert(typeof new String('Hello World'));
alert(typeof new Number(5));
将提醒“对象”。
最好的方法是使用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
我认为将var转换为字符串会降低性能,至少在最新的浏览器中进行的测试显示了这一点。
如果你关心性能,我会用这个:
typeof str === "string" || str instanceof String
用于检查变量是否为字符串(即使您使用var str = new string ("foo"), str instanceof string将返回true)。
至于检查它是否是一个数字,我会选择本地:isNaN;函数。
最好的方法是:
function isNumber(num) {
return (typeof num == 'string' || typeof num == 'number') && !isNaN(num - 0) && num !== '';
};
这满足以下测试用例:
assertEquals("ISNUMBER-True: 0", true, isNumber(0));
assertEquals("ISNUMBER-True: 1", true, isNumber(-1));
assertEquals("ISNUMBER-True: 2", true, isNumber(-500));
assertEquals("ISNUMBER-True: 3", true, isNumber(15000));
assertEquals("ISNUMBER-True: 4", true, isNumber(0.35));
assertEquals("ISNUMBER-True: 5", true, isNumber(-10.35));
assertEquals("ISNUMBER-True: 6", true, isNumber(2.534e25));
assertEquals("ISNUMBER-True: 7", true, isNumber('2.534e25'));
assertEquals("ISNUMBER-True: 8", true, isNumber('52334'));
assertEquals("ISNUMBER-True: 9", true, isNumber('-234'));
assertEquals("ISNUMBER-False: 0", false, isNumber(NaN));
assertEquals("ISNUMBER-False: 1", false, isNumber({}));
assertEquals("ISNUMBER-False: 2", false, isNumber([]));
assertEquals("ISNUMBER-False: 3", false, isNumber(''));
assertEquals("ISNUMBER-False: 4", false, isNumber('one'));
assertEquals("ISNUMBER-False: 5", false, isNumber(true));
assertEquals("ISNUMBER-False: 6", false, isNumber(false));
assertEquals("ISNUMBER-False: 7", false, isNumber());
assertEquals("ISNUMBER-False: 8", false, isNumber(undefined));
assertEquals("ISNUMBER-False: 9", false, isNumber(null));