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');