in operator (v2)

Revision 2 of this benchmark created by WebReflection on


Description

Same stuff done in version 1 except no function calls are involved.

http://jsperf.com/in-operator

Preparation HTML

<script>
  var
      // simple shim that *should* fail in old browsers
      // if getters/setters are not supported
      defineProperty = Object.defineProperty || function (o, k, v) {
          o.__defineGetter__(k, v.get);
          o.__defineSetter__(k, v.set);
          return o;
      },
      descriptor = {
          get: function () {
              return this._prop || {}; // let's say the default
          },
          set: function (_prop) {
              // here something more meaningful ...
              this._prop = _prop;
          }
      },
      descriptorSet = {
          get: function () {
              return this._prop;
          },
          set: function (_prop) {
              // here something more meaningful ...
              this._prop = _prop;
          }
      },
      object = {},
      globalResult
  ;
</script>

Test runner

Ready to run.

Testing in
TestOps/sec
in operator set
globalResult = "prop" in object || (object.prop = {});
object = {};
ready
in operator
// first one missing ... does not matter
globalResult = "prop" in object || (object.prop = {});
object = {prop:{}};
ready
in operator + magic set
globalResult = "prop" in object || (object.prop = {});
object = defineProperty({}, "prop", descriptorSet);
ready
in operator + magic
globalResult = "prop" in object || (object.prop = {});
object = defineProperty({}, "prop", descriptor);
ready
common pattern set
globalResult = (object.prop = object.prop || {});
object = {};
ready
common pattern
// first one missing ... does not matter
globalResult = (object.prop = object.prop || {});
object = {prop:{}};
ready
common pattern + magic set
globalResult = (object.prop = object.prop || {});
object = defineProperty({}, "prop", descriptorSet);
ready
common pattern + magic
globalResult = (object.prop = object.prop || {});
object = defineProperty({}, "prop", descriptor);
ready
better pattern set
globalResult = object.prop || (object.prop = {});
object = {};
ready
better pattern
// first one missing ... does not matter
globalResult = object.prop || (object.prop = {});
object = {prop:{}};
ready
better pattern + magic set
globalResult = object.prop || (object.prop = {});
object = defineProperty({}, "prop", descriptorSet);
ready
better pattern + magic
globalResult = object.prop || (object.prop = {});
object = defineProperty({}, "prop", descriptor);
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.

  • Revision 1: published by WebReflection on
  • Revision 2: published by WebReflection on