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


当前回答

呃,不如这样:

function IsString(obj) {
    return obj !== undefined && obj != null && obj.toLowerCase !== undefined;
}

经过几个月后的进一步检查,这只能保证obj是一个定义了方法或属性名称toLowerCase的对象。我为我的回答感到惭愧。请参阅投票最多的类型。

其他回答

对于数字检测,以下文章来自Douglas Crockford的JavaScript: the Good Parts:

isFinite函数是确定一个值是否可以用作数字的最佳方法,因为它拒绝NaN和Infinity。不幸的是,isFinite将尝试将其操作数转换为一个数字,因此如果一个值实际上不是一个数字,那么它不是一个好的测试。你可能想要定义自己的isNumber函数:

var isNumber = function isNumber(value) { return typeof value === 'number' &&
            isFinite(value);
};

如果你处理的是文字符号,而不是构造函数,你可以使用typeof:。

typeof "Hello World"; // string
typeof 123;           // number

如果你通过构造函数创建数字和字符串,比如var foo = new String("foo"),你应该记住typeof可能会返回foo的对象。

也许一个更简单的检查类型的方法是利用underscore.js中的方法(带注释的源代码可以在这里找到),

var toString = Object.prototype.toString;

_.isString = function (obj) {
  return toString.call(obj) == '[object String]';
}

这将返回一个布尔值true:

_.isString("Jonathan"); // true
_.isString(new String("Jonathan")); // true

你觉得这个怎么样?

const numberOrString='10' 
const isNumber = !isNaN(numberOrString*1) 

jQuery使用这个:

function isNumber(obj) {
  return !isNaN( parseFloat( obj ) ) && isFinite( obj );
}
function IsNumeric(num) {
    return ((num >=0 || num < 0)&& (parseInt(num)==num) );
}