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


当前回答

这个解决方案解决了这里提出的许多问题!

这是迄今为止我用过的最可靠的方法。这不是我发明的,也不记得我最初是在哪里找到它的。但它在其他技术失败的地方奏效:

// Begin public utility /getVarType/
// Returns 'Function', 'Object', 'Array',
// 'String', 'Number', 'Boolean', or 'Undefined'
getVarType = function ( data ){
  if (undefined === data ){ return 'Undefined'; }
  if (data === null ){ return 'Null'; }
  return {}.toString.call(data).slice(8, -1);
};  
// End public utility /getVarType/

正确性的例子

var str = new String();
console.warn( getVarType(str) ); // Reports "String"    
console.warn( typeof str );      // Reports "object"

var num = new Number();
console.warn( getVarType(num) ); // Reports "Number"
console.warn( typeof num );      // Reports "object"

var list = [];
console.warn( getVarType( list ) ); // Reports "Array"
console.warn( typeof list );        // Reports "object"

其他回答

我发现的同时考虑正数和负数的最好方法是: O'Reilly Javascript和DHTML烹饪书:

function isNumber(elem) {
var str = elem.value;
var oneDecimal = false;
var oneChar = 0;
// make sure value hasn't cast to a number data type
str = str.toString( );
for (var i = 0; i < str.length; i++) {
    oneChar = str.charAt(i).charCodeAt(0);
    // OK for minus sign as first character
    if (oneChar =  = 45) {
        if (i =  = 0) {
            continue;
        } else {
            alert("Only the first character may be a minus sign.");
            return false;
        }
    }
    // OK for one decimal point
    if (oneChar =  = 46) {
        if (!oneDecimal) {
            oneDecimal = true;
            continue;
        } else {
            alert("Only one decimal is allowed in a number.");
            return false;
        }
    }
    // characters outside of 0 through 9 not OK
    if (oneChar < 48 || oneChar > 57) {
        alert("Enter only numbers into the field.");
        return false;
    }
}
return true;

}

我认为将var转换为字符串会降低性能,至少在最新的浏览器中进行的测试显示了这一点。

如果你关心性能,我会用这个:

typeof str === "string" || str instanceof String

用于检查变量是否为字符串(即使您使用var str = new string ("foo"), str instanceof string将返回true)。

至于检查它是否是一个数字,我会选择本地:isNaN;函数。

类型检查

你可以使用typeof操作符检查变量的类型:

typeof variable

值检查

下面的代码对数字返回true,对其他任何值返回false:

!isNaN(+variable);

你正在寻找isNaN():

console.log(!isNaN(123)); console.log(!isNaN(-1.23)); console.log(!isNaN(5-2)); console.log(!isNaN(0)); console.log(!isNaN(“0”)); console.log(!isNaN(“2”)); console.log(!isNaN(“Hello”)); console.log(!isNaN(“2005/12/12”));

参见JavaScript isNaN()函数在MDN。

创建了一个jsperf,用于检查变量是否为数字。很有趣!Typeof实际上有一个性能用途。对于数字以外的任何东西使用typeof,通常以速度的1/3作为变量。构造函数,因为javascript中的大多数数据类型都是对象;数字不是!

http://jsperf.com/jemiloii-fastest-method-to-check-if-type-is-a-number

Typeof变量=== 'number'|最快|如果你想要一个数字,比如5,而不是'5' typeof parseFloat(variable) === 'number'|最快|如果你想要一个数字,比如5,和'5'

isNaN()比较慢,但也没慢那么多。我对parseInt和parseFloat寄予厚望,但它们的速度慢得可怕。