JavaScript对象的属性

时间:2010-05-03 16:39:38

标签: javascript object

在我的JavaScript中,我使用一个对象作为关联数组。它总是有财产 “主要”,并可能有其他人。所以,当我创建它时,我可能会这样做:

var myobject     = new Object ();
myobject["main"] = somevalue;

稍后可能会添加其他属性。现在,我需要知道 是否myobject只有一个属性,或几个属性,并采取 不同的动作取决于(我只是指我创建的属性)。

到目前为止,我发现的所有事情都是这样的:

flag = false;

for (i in myobject)
     {
     if  (i=="main")  continue;
     flag = true;
     break;
     }

然后在旗帜上分支。或者:

for (i in myobject)
     {
     if  (i=="main")  continue;
     do_some_actions ();
     break;
     }

这些方法有效,但我觉得我忽略了一些东西。是 有更好的方法吗?

4 个答案:

答案 0 :(得分:3)

我可能会这样做

function hasAsOnlyProperty( obj, prop )
{
  for ( var p in obj )
  {
    if ( obj.hasOwnProperty( p ) && p != prop )
    {
      return false;
    }
  }
  return true;
}

var myobject= new Object();
myobject.main = 'test';

// console requires Firebug
console.log( hasAsOnlyProperty( myobject, 'main' ) ); // true

// set another property to force false    
myobject.other = 'test';

console.log( hasAsOnlyProperty( myobject, 'main' ) ); // false

答案 1 :(得分:2)

有一个“in”运算符:

if ('name' in obj) { /* ... */ }

还有从Object原型继承的“hasOwnProperty”函数,它将告诉您对象是否具有直接属性而不是通过原型继承:

if (obj.hasOwnProperty('name')) { /* ... */ }

答案 2 :(得分:1)

您可以使用hasOwnProperty来检查对象是否具有该属性。

if (myobject.hasOwnProperty("main")) {
    //do something
}

答案 3 :(得分:0)

如果您碰巧知道分配给对象的“下一步”方法的名称,则可以将其作为

进行测试
if (myObject.testMethod) {
    //proceed for case where has > 1 method
}