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()どういうわけか私が仮定することをする必要があります。したがって、私の関数では、プロパティが存在する場合はそれを使用する独自のデフォルトを設定できます..

すなわち:

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 に答える