Abstract operations and other functions drawn from the ECMAScript specification

npm install especially
14 downloads in the last month

ECMAScript Spec Operations, in ECMAScript

Have you ever wanted to write a to-the-letter implementation of some ECMAScript spec function? Maybe you want to run tests against it; maybe you're just crazy and like self-hosting JavaScript in JavaScript. In either case, this is the package for you!

Especially has a small-but-growing collection of meta-textual and abstract operations drawn directly from the pages of the ECMAScript 6 draft specification. From common things like Get to dealing with internal slots, Especially has you covered.


Especially has no main module (gasp). Instead, you'll require one of the top-level modules that contain the stuff you want.



  • assert: ensures you pass it a boolean, then throws if it's not true
  • define_built_in_data_property: a shortcut for defining a built-in data property with the usual property descriptor.
  • Internal slot management:
    • make_slots(object, arrayOfSlotNames): call this to initialize an object's internal slots. Often referenced in the spec as "instances of (something) are initially created with the internal slots listed in (some table)."
    • get_slot(object, name): get the value of an internal slot. Often referenced in the spec as "the value of (object)'s [[SlotName]] internal slot."
    • set_slot(object, name): set the value of an internal slot. Often referenced in the spec as "Set (object)'s [[SlotName]] internal slot to (a value)."
    • has_slot(object): check whether an object has an internal slot with the given name. Often referenced in the spec as "If (object) does not have a [[SlotName]] internal slot."


A few well-known symbol are included:

  • "@@create" will give you a symbol that is used by OrdinaryConstruct and related operations.
  • "@@iterator" will give you a symbol that is used by GetIterator.


Some of the well-known intrinsic objects are included by name, e.g. "%ObjectPrototype%". These are used by GetPrototypeFromConstructor and related operations.

Usage Notes

Especially is meant to run in Node.js 0.11.9+, at least for now. It uses certain ES6 features so far only implemented in bleeding-edge V8, with the --harmony flag turned on.

Install it from npm into your project with npm install especially. And don't forget to run your program, or your tests, with the --harmony flag.

You can see examples of it in use in the reference implementation of the ES6 promises specification.

npm loves you