具有动态生成属性的javascript object.hasOwnProperty()

时间:2013-09-18 00:01:21

标签: javascript jquery arrays hasownproperty

我有一个对象,我正在传递给一个函数,我试图弄清楚该属性是否存在,当它没有时,忽略它。

问题是,即使属性存在,我也会继续false,为了示例,我将使用我今天早些时候在另一个问题上发布的对象。

var myObj = {
       something1_max:50,
       something1_enabled:false,
       something1_locked:true,
       something2_max:100,
       something2_enabled:false,
       something2_locked:true,
       something3_max:10,
       something3_enabled:true,
       something3_locked:true
    }

传递给像buildRetentionPolicyStr('something2', myObj);

这样的函数

到目前为止,我已经完成了我需要的所有功能。直到我在实时数据上尝试并在实际情况下实现,我认为属性是静态的,并且有默认值,否则并不总是存在。所以我需要以hasOwnProperty()的方式做某些事情。所以在我的函数中我可以设置我自己的默认值,如果属性存在,使用它..

即:

function buildRetentionPolicyStr(theScope, obj)
{
   var myVar = 0;
   if(obj.hasOwnProperty(theScope+'_enabled'))
   {
       myVar = obj[theScope+'_enabled'];
   }
}

在我目前的测试用例中,该对象确实存在,所以我知道这是真的。但是当我这样做时(在if语句正上方

console.log(obj.hasOwnProperty(theScope+'_enabled'));
//or
console.log(obj.hasOwnProperty([theScope+'_enabled']));

我得到的输出分别与上面的顺序相符:

false
//or
["something2_enabled"]

什么是,如果有的话,以正确的方式检查属性是否以这种方式存在?

2 个答案:

答案 0 :(得分:3)

这样做的简单方法是针对您的财产运行typeof

obj = { xxx: false }

typeof obj.xxx // 'boolean'
typeof obj.yyy // 'undefined'

答案 1 :(得分:1)

好。仅供参考,我在等待答案时最终修修补补。结束我的代码审查,总体上发现我有一些混合匹配的案例。虽然我一直在做我应该做的事情,但我覆盖了我的一个变量并导致我所寻找的对象基本上最终会丢失。事实上false实际上是正确的。

所以在我的情况下验证我是如何或哪个适合我。

obj.hasOwnProperty([theScope+'_enabled']);

是正确的方法。对于任何偶然发现这一点的人寻求答案: - )