Test case details

Preparation Code

function checkNested(obj /*, level1, level2, ... levelN*/ ) { var args = Array.prototype.slice.call(arguments), obj = args.shift(); for (var i = 0; i < args.length; i++) { if (!obj.hasOwnProperty(args[i])) { return false; } obj = obj[args[i]]; } return true; } function checkNestedFast(obj /*, level1, level2, ... levelN*/ ) { for (var i = 1; i < arguments.length; i++) { if (!obj.hasOwnProperty(arguments[i])) { return false; } obj = obj[arguments[i]]; } return true; } function checkNestedCatch(obj /*, level1, level2, ... levelN*/ ) { arguments = obj.split("."); obj = eval(arguments[0] + " || {} "); for (var i = 1; i < arguments.length; i++) { if (!obj.hasOwnProperty(arguments[i])) { return false; } obj = obj[arguments[i]]; } return true; } var test = { level1: { level2: { level3: 'level3' } } };

Test cases

Test #1

checkNested(test, 'level1', 'level2', 'level3'); // true checkNested(test, 'level1', 'level2', 'foo'); // false

Test #2

checkNestedFast(test, 'level1', 'level2', 'level3'); // true checkNestedFast(test, 'level1', 'level2', 'foo'); // false

Test #3

checkNestedCatch('test.level1.level2.level3'); // true checkNestedCatch('test.level1.level2.foo'); // false