--- layout: docs title: Playground description: How to use the playground. permalink: /docs/usage/playground/ redirect_from: /playground.html --- > Playground is a proving ground for language ideas.
Unofficial
These features are in no way endorsed by Ecma International and are not a part of any ECMAScript standard, nor are they necessarily on track to become part of any standard. Use with extreme caution.
## Usage ```js $ 6to5 --playground ``` ```js to5.transform('code', { playground: true }); ```Proposal Authors
If you are actively working on an ECMAScript proposal, this is a good place to get your ideas implemented with so that they may be tested with all of the latest language and API features.
Please feel free to open an issue on the 6to5 repository with your WIP spec, and we can discuss getting it implemented. Be sure to include as much information as possible.
## Features ### Memoization assignment operator The memoization assignment operator allows you to lazily set an object property. It checks whether there's a property defined on the object and if there isn't then the right hand value is set. This means that `obj.x` in the following `var x = { x: undefined }; obj.x ?= 2;`` will still be `undefined` because it's already been defined on the object. **Uses** ```js var obj = {}; obj.x ?= 2; obj.x; // 2 obj = { x: 1 }; obj.x ?= 2; obj.x; // 1 obj = { x: undefined } obj.x ?= 2; obj.x; // undefined ``` **Example** ```js var obj = {}; obj.x ?= 2; ``` is equivalent to ```js var obj = {}; if (!Object.prototype.hasOwnProperty.call(obj, 'x')) obj.x = 2; ``` ### Method binding ```javascript var fn = obj#method; var fn = obj#method("foob"); ``` is equivalent to ```javascript var fn = obj.method.bind(obj); var fn = obj.method.bind(obj, "foob"); ``` ### Method binding function shorthand ```javascript ["foo", "bar"].map(#toUpperCase); // ["FOO", "BAR"] [1.1234, 23.53245, 3].map(#toFixed(2)); // ["1.12", "23.53", "3.00"] ``` equivalent to ```javascript ["foo", "bar"].map(function (val) { return val.toUpperCase(); }); [1.1234, 23.53245, 3].map(function (val) { return val.toFixed(2); }); ``` ### Object getter memoization ```js var foo = { memo bar() { return complex(); } }; class Foo { memo bar() { return complex(); } } ``` is equivalent to ```js var foo = { get bar() { return Object.defineProperty(this, "bar", { value: complex(), enumerable: true, configurable: true, writable: true }).bar; } }; class Foo { get bar() { return Object.defineProperty(this, "bar", { value: complex(), enumerable: true, configurable: true, writable: true }).bar; } } ``` ### This shorthand ```js @foo ``` is equivalent to ``` this.foo ```Enables experimental
Enabling playground also enables experimental support.