2011-07-05 77 views
1

在JavaScript中,我怎麼說:是否有用於檢查變量類型的快捷語法?

if (typeof obj === 'number' 
    || typeof obj === 'boolean' 
    || typeof obj === 'undefined' 
    || typeof obj === 'string') { 

換句話說,是否有某種:

if (typeof obj in('number','boolean','undefined','string')) { 
+0

您是否希望改進第一條語句? –

+0

只是好奇 - 爲什麼你需要檢查這麼多類型?我以前從來沒有這樣做過。 –

回答

2

更多穀物的磨:

if (('object function string undefined').indexOf(typeof x) > -1) { 
    // x is an object, function, string or undefined 
} 

if ((typeof x).match(/object|function|string|undefined/)) { 
    // x is an object, function, string or undefined 
} 

有多少種方法你想這個貓剝皮?

+0

請注意,這些也將匹配碰巧是四個類型名稱中的任何一個的子字符串的任何類型。 – Guffa

6

您可以使用switch

switch (typeof obj) { 
    case 'number': 
    case 'boolean': 
    case 'undefined': 
    case 'string': 
    // You get here for any of the four types 
    break; 
} 

在Javascript中1.6 :

if (['number','boolean','undefined','string'].indexOf(typeof obj) !== -1) { 
    // You get here for any of the four types 
} 
+0

開關語句應始終有一個默認塊。 – RobG

+0

@RobG:即使它裏面沒有代碼? – Guffa

+0

是的,只是一個約定,可能更符合其他語言,並清楚說明如果所有情況都失敗會發生什麼。 – RobG

4

你可以用近似的東西像

var acceptableTypes = {'boolean':true,'string':true,'undefined':true,'number':true}; 

if (acceptableTypes[typeof obj]){ 
    // whatever 
} 

或更詳細的

if (typeof obj in acceptableTypes){ 
    // whatever 
} 
3

是的,有。 typeof(obj)只返回一個字符串,這樣你就檢查時,如果一個字符串是在任何一組字符串,你可以簡單地做:

if (typeof(obj) in {'number':'', 'boolean':'', 'undefined':'', 'string':''}) 
{ 
    ... 
} 

或者你可以使它更短。由於唯一的「類型」是typeof可能返回是numberstringbooleanobjectfunctionundefined,在這種特殊情況下,你可以只讓一個排除代替。

if (!(typeof(obj) in {'function':'', 'object':''})) 
{ 
    ... 
} 
+0

* typeof *是一個運算符,不需要分組操作符,所以'typeof obj'就足夠了,並且是首選。 – RobG

1

我喜歡在類似情況下使用函數式編程。 所以,你可以使用underscore.js以使其更具可讀性:

_.any(['number','boolean','undefined','string'], function(t) { 
    return typeof(obj) === t; 
}); 
相關問題