2016-03-07 63 views
3

在研究中,我試圖找到確定對象是否具有值並且可以在對象上執行for的最快方法。 REFhttps://jsperf.com/jquery-each-vs-each-vs-for-loop/2以編程方式確定是否可以在對象上運行循環

我用來做這一點,但在和同事討論他用。每次我們看它在一起,並發現這兩種方法是緩慢的,需要改進。

if(Object.keys(X).length > 0) { 
    // Execute For 
} 

這是我所知道的:

obj instanceof Object 

typeof(obj) == "object" and obj !== "null" 

,因爲空是一個對象,都有自己的平局背影,但也許還有另一種更優的方法。

+0

空物體怎麼樣?你的代碼會以不同的方式對待它那麼你究竟需要什麼? – Bergi

+0

你的意思是'for for','for for'或'for(i = 0; i <... length; i ++)'循環嗎? – Bergi

+0

在空列表上執行循環有什麼危害? –

回答

0

A for循環可以在任何對象上執行,所以這裏沒有什麼可以檢查的。或許您需要考慮要迭代的對象的屬性,但這取決於應用程序。

通常迭代對象時的代碼可能看起來像:

for(var i in obj) { 
    if(obj.hasOwnProperty(i)) { 
     //do stuff here... 
    } 
} 

hasOwnProperty檢查確保您只使用添加到對象本身,而不是它的原型,價值觀。

相關問題