在我的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;
}
这些方法有效,但我觉得我忽略了一些东西。是 有更好的方法吗?
答案 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
}