es6-shim – ECMAScript 6 functionality on ECMAScript 5

[2011-12-27] esnext, dev, javascript, jslang
(Ad, please don’t block)
Update 2012-03-13: Added a section on installation.

Paul Miller’s es6-shim gives you functionality that will be in ECMAScript 6 (code-named ECMAScript.next), on ECMAScript 5 engines. It was initially based on a project of mine, but adds much new functionality, Node.js compatibility, and (not least) tests.

Highlights

The following are a few highlights. Take a look at the tests to get more usage examples.
  • Strings
        > "hello world".startsWith("hello")
        true
        > "hi".repeat(3)
        'hihihi'
    
  • Object.getOwnPropertyDescriptors() – makes Object.create() more useful.
        var copy = Object.create(Object.getPrototypeOf(orig),
            Object.getOwnPropertyDescriptors(orig));
    
        var newFoo = Object.create(FooProto,
            Object.getOwnPropertyDescriptors({
                instanceProp1: 123,
                instanceProp2: "abc"
            }));
    
  • Object.is() – an improved version of === (which will likely become an operator called is in ECMAScript 6).
        > 0 === -0
        true
        > Object.is(0, -0)
        false
        > NaN === NaN
        false
        > Object.is(NaN, NaN)
        true
    
  • Map – gives you a dictionary with arbitrary keys.
        > var m = new Map();
        undefined
        > m.set("1", "foo");
        undefined
        > m.set(1, "bar");
        undefined
        > m.get("1")
        'foo'
        > m.get(1)
        'bar'
    
    "1" and 1 are (coerced to) the same key with arrays. Note that each object is considered different from any other object. Hence, the following map entry cannot be easily retrieved:
        > m.set({}, "hello");
        > m.get({})  // new object!
        undefined
    

Installation

You can either load es6-shim.js as a script in a browser or install it via npm on Node.js (requires at least version 0.6.5):
    npm install es6-shim
Afterwards, you enable it in your project like this:
    require("es6-shim");
And you can play with it on the Node.js REPL, with the option of enabling it by default [2].

Related posts

  1. ECMAScript.next: the “TXJS” update by Eich [what will be in ECMAScript 6, code-named ECMAScript.next]
  2. Execute code each time the Node.js REPL starts