Script Preparation code:
x
 
 function getPropertyDescriptor(obj, property) {
     const descriptor = Object.getOwnPropertyDescriptor(obj, property);
     if (descriptor !== undefined)
         return descriptor;
     const proto = Object.getPrototypeOf(obj);
     if (proto === null)
         return undefined;
     return getPropertyDescriptor(proto, property);
 }
 function getPropertyOrDefault(obj, property, defaultValue) {
     const d = getPropertyDescriptor(obj, property);
     if (d) {
         if (Object.prototype.hasOwnProperty.call(d, "value"))
             return d.value;
         if (Object.prototype.hasOwnProperty.call(d, "get"))
             return d.get.call(obj);
     }
     return defaultValue;
 }
 function getPropertyOrDefault2(obj, property, defaultValue) {
   if (Reflect.has(obj, property)) return obj[property];
   return defaultValue;
 }
 class T {
     constructor() {
         this.requiredField = 1;
         this.undefinableField = undefined;
         this.m_requiredProp = 1;
         this.m_undefinableProp = undefined;
     }
     get requiredProp() {
         return this.m_requiredProp;
     }
     set requiredProp(value) {
         this.m_requiredProp = value;
     }
     get undefinableProp() {
         return this.m_undefinableProp;
     }
     set undefinableProp(value) {
         this.m_undefinableProp = value;
     }
 }
 var t = new T();
 t.requiredField = 1;
 t.requiredProp = 1;
 class D extends T {}
 var d = new D();
d.requiredField = 1;
 d.requiredProp = 1;
Tests:
  • requiredProp

     
    const v = t.requiredProp;
  • requiredProp_getPropertyOrDefault

     
    const v = getPropertyOrDefault(t, "requiredProp", 0);
  • derived_requiredProp

     
    const v = d.requiredProp
  • derived_requiredProp_getPropertyOrDefault

     
    const v = getPropertyOrDefault(d, "requiredProp", 0);
  • requiredField

     
    const v = t.requiredField
  • requiredField_getPropertyOrDefault

     
    const v = getPropertyOrDefault(t, "requiredField", 0);
  • derived_requiredField

     
    const v = d.requiredField
  • derived_requiredField_getPropertyOrDefault

     
    const v = getPropertyOrDefault(d, "requiredField", 0);
  • derived_prop_reflectHas

     
    const v = getPropertyOrDefault2(d, "requiredField", 0);
Rendered benchmark preparation results:

Suite status: <idle, ready to run>

Previous results

Experimental features:

  • Test case name Result
    requiredProp
    requiredProp_getPropertyOrDefault
    derived_requiredProp
    derived_requiredProp_getPropertyOrDefault
    requiredField
    requiredField_getPropertyOrDefault
    derived_requiredField
    derived_requiredField_getPropertyOrDefault
    derived_prop_reflectHas

    Fastest: N/A

    Slowest: N/A

Latest run results:
Run details: (Test run date: 3 years ago)
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36 Edg/94.0.992.50
Chrome 94 on Windows
View result in a separate tab
Test name Executions per second
requiredProp 7844539.0 Ops/sec
requiredProp_getPropertyOrDefault 391684.3 Ops/sec
derived_requiredProp 7662199.5 Ops/sec
derived_requiredProp_getPropertyOrDefault 294174.0 Ops/sec
requiredField 7638949.0 Ops/sec
requiredField_getPropertyOrDefault 778359.7 Ops/sec
derived_requiredField 7745280.0 Ops/sec
derived_requiredField_getPropertyOrDefault 782821.4 Ops/sec
derived_prop_reflectHas 2008201.8 Ops/sec