JSFiddle - React, Tailwind, and code Playground
JavaScript
var guard = (function() {
function notObj(obj) {
return (obj === undefined || obj === null);
}
var guard = {
getSafe: function() {
if (!arguments || !arguments.length || notObj(arguments[0]))
return undefined;
var obj = arguments[0];
for (var i = 1; i < arguments.length; i++) {
if (notObj(obj[arguments[i]]))
return undefined;
obj = obj[arguments[i]];
if (notObj(obj))
return obj;
}
return obj;
},
setSafe: function(options) {
var args = options.args.slice(0);
var last = args.pop();
var obj = guard.getSafe.apply(guard, args);
if (notObj(obj))
return false;
obj[last] = options.val;
return true;
}
};
return guard;
})();
var a;
var i, loopCount = 10000;
var st, end;
st = Date.now();
for(i = 0; i < loopCount; i++) {
try {
a.b.c.d;
}
catch(ex) {
}
}
end = Date.now();
var tryCatchTime = end - st;
st = Date.now();
for(i = 0; i < loopCount; i++) {
guard.getSafe(a, 'b', 'c', 'd');
}
end = Date.now();
var guardTime = end - st;
console.log('try-catch is '+ (tryCatchTime/guardTime) +' times slower than the guard method');