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: " +...