0

以下の子オブジェクトが作成されていない場合

if(typeof this.obj[child1][child2]!=="undefined"){
}

上記は機能しませんが、これは機能します

if(typeof this.obj[child1]!=="undefined"){
}
4

5 に答える 5

1

typeof ... 'undefined'ではないかどうかを判断するためには必要ありthis.obj[child1][child2]ませんundefined。代わりに次を使用します。

if (this.obj && this.obj[child1] && this.obj[child1][child2]) {}

次のように:

var obj = {};
obj.c1 = {};
alert( obj && obj.c1 && obj.c1.c2 ? 'obj.c1.c2 exists' : 'nope'); 
     //=> "nope"
obj.c1.c2 = 1;
alert( obj && obj.c1 && obj.c1.c2 ? 'obj.c1.c2 exists' : 'nope'); 
     //=> "obj.c1.c2 exists"

任意の特定のパスの存在を判断する関数を作成できますObject

function pathExists(root,path){
  var pathx = path.constructor === Array && path || path.split(/\./)
    , trial
    , pathok = true
  ;

  while (pathx.length && pathok) {
    trial = pathx.shift();
    pathok = (root = root && root[trial] || false, root);
  }
  return pathok;
}
// usage examples
var obj = {c1:1};
pathExists(obj,'c1.c2'); //=> false
pathExists(obj,'c1'); //=> 1
obj.c1 = { c2: {c3: 3} };
pathExists(obj,['c1','c2','c3']); //=> 3
// your case
if ( pathExists(this,[obj,child1,child2]) ) { /*...*/ }
于 2013-09-06T11:12:58.070 に答える
0

これを最初のケースに使用します -

if(this.obj[child1] && typeof this.obj[child1][child2]!=="undefined"){
}
于 2013-09-06T11:00:04.250 に答える