JSFiddle - React, Tailwind, and code Playground

by Mehmet Yatkı

JavaScript

var tryToValidate = function(cb) {
  try {
    return cb();
  } catch (e) {
    return false;
  }
};

Object.prototype.hasOwnNestedProperty = function(propertyPath){
    if(!propertyPath)
        return false;

    var properties = propertyPath.split('.');
    var obj = this;

    for (var i = 0; i < properties.length; i++) {
        var prop = properties[i];

        if(!obj || !obj.hasOwnProperty(prop)){
            return false;
        } else {
            obj = obj[prop];
        }
    }

    return true;
};

var me = {
   innerObject:{
       deepObject:{
           value:'Here am I'
       }
   }
};
var t1 = 0, t2 = 0, successTotal1 = 0, successTotal2 = 0, failTotal1 = 0, failTotal2 = 0, testCount = 5000;

for (i = 0; i < testCount; i++) {
  t1 = performance.now();
  tryToValidate(function(){ return me.innerObject.deepObject.value});
  t2 = performance.now();
  var diff =  (t2 - t1);
  successTotal1 += diff;
  // console.log("try catch took " + diff + " milliseconds.");
}

for (i = 0; i < testCount; i++) {
  t1 = performance.now();
  tryToValidate(function(){ return me.innerObject.x.value});
  t2 = performance.now();
  var diff =  (t2 - t1);
  failTotal1 += diff;
  // console.log("try catch took " + diff + " milliseconds.");
}

for (i = 0; i < testCount; i++) {
  t1 = performance.now();
  me.hasOwnNestedProperty('innerObject.deepObject.value');
  t2 = performance.now();
  var diff =  (t2 - t1);
  successTotal2 += diff;
  // console.log("prototype took " + diff + " milliseconds.");
}

for (i = 0; i < testCount; i++) {
  t1 = performance.now();
  me.hasOwnNestedProperty('innerObject.x.value');
  t2 = performance.now();
  var diff =  (t2 - t1);
  failTotal2 += diff;
  // console.log("prototype took " + diff + " milliseconds.");
}

console.log("try/catch average on successful match: " + (successTotal1/testCount));
console.log("prototype average on successful match: " + (successTotal2/testCount));

console.log("try/catch average on failed match: " +...