Вы действительно не нужны 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])) { /*...*/ }
Как насчет 'если (TypeOf это .obj [child1]! == "undefined" && typeof this.obj [child1] [child2]! == "undefined") '? –
Ну, если в обоих случаях 'this.obj [child1]' 'undefined', то' this.obj [child1] [child2] 'будет вызывать ошибку, например' не может получить доступ к свойству ... из undefined' –