2012-02-25 238 views
0

我有一個全局對象MyFruits可以有多個屬性。它至少有兩個屬性:蘋果和橘子。我需要找出它是否有比這兩個更多的屬性。javascript測試對象屬性

目前,我對MyFruits進行了字符串處理,創建了一個只包含蘋果和桔子屬性的新對象,並將其串化並比較兩個字符串的長度。事情是這樣的:

var JsonString1 = JSON.stringify(MyFruits); 

var test2 = new Object(); 
test2.Apples= MyFruits.Apples; 
test2.Oranges= MyFruits.Oranges; 

var JsonString2= JSON.stringify(test2); 

alert(JsonString1.length - JsonString2.length); 

現在,它最初看起來像它的工作:如果MyFruits不只包含了兩個主要的多個屬性,長度的差異會從0

不同還有的Object.keys(obj).length方法可以計算一個對象的屬性數量,但它是新的,並且在所有瀏覽器中都不支持,所以我不打算使用它。

這是最好的方法嗎?讓我知道是否有更好的方法。

感謝您的建議。

+0

請參閱:https://github.com/kriskowal/es5-shim – 2012-02-25 22:58:58

+0

您想計算一個對象的屬性數量? – 2012-02-25 23:02:56

回答

2

而是序列化對象,你會從對象更好地循環,並檢查是否有這不是ApplesOranges任何財產:如果你只想要的枚舉密鑰

for (var i in MyFruits) { 
    if (MyFruits.hasOwnProperty(i) && i !== 'Apples' && i !== 'Oranges') { 
     throw 'Not expected!'; // Do something, eg: error_flag=true;break; 
    } 
} 
3

爲了看看它是否有超過2個屬性只是枚舉屬性,看看是否存在超過2。

var count = 0; 
for (var name in test2) { 
    if (test2.hasOwnProperty(name)) { 
    count++; 
    if (count > 2) { 
     break; 
    } 
    } 
} 

if (count > 2) { 
    // Has more than 2 properties 
} 
+0

你也可以用一個if語句替換'count'變量來尋找'name!='Apples'&& name!='Oranges''。 – djd 2012-02-25 23:02:34

+0

@Dave true,那是另一個有效的方法。 – JaredPar 2012-02-25 23:03:05

0

一個對象,我會考慮如果Object.keys()沒有實現而不是使用JSON對象(這在所有主流瀏覽器中都不可用)擴展Object。

if (typeof Object.keys === 'undefined') { 

    Object.keys = function (obj) { 

     var keys = []; 
     for (var property in obj) { 
      keys.push(property); 
     } 

     return keys; 

    } 

} 

現在,您隨時都可以打電話給Object.keys(yourObject)並獲得對象鍵的列表。

+0

不支持原生JSON的唯一「主要瀏覽器」是IE7-。另請參閱JSON:[兼容性表](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/JSON#Browser_compatibility)。 – 2012-02-25 23:12:23

+0

@RobW那麼?我的發言仍然有效。不幸的是,IE7仍然存在並且經常需要Web開發人員進行攻擊。 – 2012-02-25 23:20:18

+0

我沒有使你的陳述無效。我剛纔注意到,IE是唯一的「主要瀏覽器」(市場份額約爲3-6%([3.34])(http://gs.statcounter.com/#browser_version-ww-monthly-201202-201202-bar ) - [5.93](http://www.w3counter.com/globalstats.php?year=2012&month=1) - [4](http://www.getclicky.com/marketshare/global/web-browsers/internet -explorer /)))不支持原生JSON。 – 2012-02-26 10:25:25