如何测试值是字符串还是int?

时间:2011-09-15 23:45:27

标签: javascript

  

可能重复:
  Finding Variable Type in JavaScript

如何测试值是字符串还是int?有点像...

X =?

如果X是Int {}

如果X是字符串{}

谢谢!

5 个答案:

答案 0 :(得分:8)

您可以使用typeof运算符:

var x = 1;
console.log(typeof x);
x = 'asdf';
console.log(typeof x);

打印:

number
string

答案 1 :(得分:3)

这是一个支持typeof的功能,但在需要时默认为Object.prototype.toString (速度慢得多)

这样,您可以从new String('x')null/regex/(在Chrome中)获得一些意外值。

var type = (function () {
    var toString = Object.prototype.toString,
        typeof_res = {
            'undefined': 'undefined',
            'string': 'string',
            'number': 'number',
            'boolean': 'boolean',
            'function': 'function'
        },
        tostring_res = {
            '[object Array]': 'array',
            '[object Arguments]': 'arguments',
            '[object Function]': 'function',
            '[object RegExp]': 'regexp',
            '[object Date]': 'date',
            '[object Null]': 'null',
            '[object Error]': 'error',
            '[object Math]': 'math',
            '[object JSON]': 'json',
            '[object Number]': 'number',
            '[object String]': 'string',
            '[object Boolean]': 'boolean',
            '[object Undefined]': 'undefined'
        };
    return function type(x) {
        var the_type = typeof_res[typeof x];
        return the_type && (the_type !== 'function' || (x.apply && x.call)) ?
            the_type :
            tostring_res[toString.call(x)] || (x ? 'object' : 'null');
    };
})();

type( new String('test') ); // string
type( function(){} );       // function
type( null );               // null
type( /regex/ );            // regexp

编辑: 我刚刚完成了重写,并删除了该功能的关键部分。固定的。

或者更紧凑的版本:

var type = (function() {
    var i, lc, toString = Object.prototype.toString,
        typeof_res = {},
        tostring_res = {},
        types = 'Undefined,String,Number,Boolean,Function,Array,Arguments,RegExp,Date,Null,Error,Math,JSON'.split(',');
    for (i = 0; i < types.length; i++) {
        lc = types[i].toLowerCase();
        if (i < 5) typeof_res[lc] = lc;
        tostring_res['[object ' + types[i] + ']'] = lc;
    }

    return function type(x) {
        var the_type = typeof_res[typeof x];
        return the_type && (the_type !== 'function' || (x.apply && x.call)) ? 
            the_type : 
            tostring_res[toString.call(x)] || (x ? 'object' : 'null');
    };
})();

答案 2 :(得分:2)

typeof可以解决大多数的问题。但是,如果您的NumberString不是原语,则会返回'object'。一般来说,这不是你想要的。

var str = new String('Hello');
typeof str; // 'object'

typeof还说null'object',而在WebKit中,正则表达式是'function'。我认为typeof的主要优点是检查变量而不抛出ReferenceError

您也可以检查变量的constructor属性,或使用variable instanceof String。但是,在使用交叉window代码时,这两种方法都无法在多个window环境中使用。

确定类型的其他保证方式是......

var getType = function(variable) {
    return Object.prototype.toString.call(variable).slice(8, -1).toLowerCase();
}

jsFiddle

答案 3 :(得分:0)

使用typeof函数

中内置的JavaScript
var s = "string",
    n = 1; // number

if(typeof s == 'string'){
  //do stuff for string
}


if(typeof n == 'number'){
  //do stuff for number
}

答案 4 :(得分:0)

其他人已经讨论了typeof运算符和Object.prototype.toString的使用,但是如果你想专门测试一个int而不是任何类型的数字那么你可以做一些变化:

function isInt(n) {
   return typeof n === "number" && n === Math.floor(n);
}

(如果需要,请插入所有Object.prototype.toString内容。)