2010-06-22 93 views
7

我有一個JavaScript函數,其中有人能傳遞什麼,我使用檢查它是否是安全的迭代一個JavaScript變量

for x in obj 

語法遍歷它的每一個鍵。但是,如果它們傳遞一個原語(字符串或數字),則會導致錯誤;正確的行爲是讓函數在沒有密鑰的對象上以相同的方式行事。

我可以做一個try..catch塊來解決這個問題,但是有另外一種(更簡潔的)方法嗎?

回答

7
x && typeof(x) === 'object' 

對於對象和數組,這是正確的(儘管您通常不希望用for..in來遍歷數組)。

編輯:修復,每個CMS。

+3

好的測試,我可能會添加的唯一的事情是'typeof'是一元運算符而不是一個函數,所以parens只是圍繞'x'做一個表達式,然後應用運算符。另外,儘管我很迂腐和愚蠢,因爲'typeof'總是返回一個字符串,'=='運算符可能會更快。所有這一切都說,這是完全沒問題的...... – 2010-06-22 22:38:38

+1

唯一的問題可以是'null',是一個原語,'typeof'不幸是完全錯誤的:'typeof null =='object'' – CMS 2010-06-22 23:20:20

+2

Alex:爲什麼會''= ='比'==='快嗎?根據ECMAScript規範,在這種情況下,兩個比較的步驟完全相同。 – 2010-06-23 00:26:36

2

有一些,你可以推斷出的方式,這裏有一個很好的一個:

function isIterable(obj) { 
    if (obj && obj.hasOwnProperty) { 
    return true; 
    } 
    return false; 
} 

你可以挑一些他們。

相關問題