5

我有一个要传递给函数的对象,我试图确定该属性是否存在,如果不存在,则忽略它。

问题是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()。因此,在我的函数中,我可以设置我自己的默认值,如果该属性存在,请使用它..

IE:

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"]

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

4

2 回答 2

3

一种简单的方法是typeof针对您的财产运行:

obj = { xxx: false }

typeof obj.xxx // 'boolean'
typeof obj.yyy // 'undefined'
于 2013-09-18T00:15:16.353 回答
1

我最终对我的代码进行了审查,以总体上确定我有一些混合匹配的案例。当我在做我应该做的事情时,我覆盖了我的一个变量并导致我正在寻找的对象基本上最终丢失了。所以实际上false是正确的。

因此,在我的情况下验证适合我的方式或方式。

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

是正确的方法。

于 2013-09-18T00:48:27.197 回答