以下の子オブジェクトが作成されていない場合
if(typeof this.obj[child1][child2]!=="undefined"){
}
上記は機能しませんが、これは機能します
if(typeof this.obj[child1]!=="undefined"){
}
以下の子オブジェクトが作成されていない場合
if(typeof this.obj[child1][child2]!=="undefined"){
}
上記は機能しませんが、これは機能します
if(typeof this.obj[child1]!=="undefined"){
}
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]) ) { /*...*/ }
これを最初のケースに使用します -
if(this.obj[child1] && typeof this.obj[child1][child2]!=="undefined"){
}