2011-09-15 57 views

回答

8

可以使用typeof操作:

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

打印:

number 
string 
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

+0

我記得你在大約一個月前向我解釋這一點。 –

+0

'typeof str; //'數字'?那個必須來自IE5。 ;) – user113716

+0

@帕特里克哎呀! – alex

0

使用JavaScript的內置typeof功能

var s = "string", 
    n = 1; // number 

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


if(typeof n == 'number'){ 
    //do stuff for number 
} 
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'); 
    }; 
})(); 
0

其他人已經談過typeof操作和使用Object.prototype.toString,但如果你想專門測試一個int相比,任何類型的號碼那麼你可以做這樣一些變化:

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

(如果需要插入所有Object.prototype.toString東西)

相關問題