2012-02-25 146 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