Skip to content

@Raynos /a.md
Created

Embed URL

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Shim status of ES6

ES6 what can be shimmed and what not.

Currently only lists things that can be shimmed or are experimentally implemented

Note that for any kind of decent ES6 support we need an ES6 transpiler. A few projects are attempting this Reference SO question

Firefox

  • WeakMaps, Maps and Sets
  • Old proxies (not direct proxies)
  • let, const

Chrome (requires harmony flags on)

  • let, const
  • WeakMaps, Maps and Sets
  • old proxies.

Shimmables of ES6

The following are currently shimmed. Note a lot of these are not natively implemented anywhere yet.

String extras

By ES6-shim

  • String.prototype.repeat
  • String.prototype.startsWith
  • String.prototype.endsWith
  • String.prototype.contains

Array extras

By ES6-shim]1

  • Array.from
  • Array.of

Number extras

By ES6-shim

  • Number.isFinite
  • Number.isNaN
  • Number.toInteger
  • Number.isInteger

Object extras

By ES6-shim

  • Object.getOwnPropertyDescriptors
  • Object.getPropertyDescriptor
  • Object.getPropertyNames
  • Object.is
  • Object.isnt

Math extras

By ES6-shim

  • Math.sign

By fdlibm

  • Math.log10
  • Math.log1p
  • Math.expm1
  • Math.cosh
  • Math.sinh
  • Math.tanh
  • Math.acosh
  • Math.asinh
  • Math.atanh
  • Math.hypot
  • Math.trunc
  • Math.sign

By rwldrn

  • Math.cbrt

Maps, Sets and WeakMaps

ES6-shim covers Map and Set. WeakMap shim. ES6 collections also has alternative shims with special note on Andrea's WeakMap implementation choice.

Unshimmable subset of ES6

These cannot be shimmed currently.

Any new syntax

Can not be shimmed. This includes

  • let
  • const
  • typeof null === "null"

Proxies

I've not seen any implementation. It's nearly impossible to emulate without severe restrictions. Note it's possible to emulate the newer specification of proxies from the older specification (firefox/chrome have the older implementation lying around)

Modules

module syntax cannot be shimmed. Depending on what the programmatic module API is like it may be possible to shim but it's not finalized.

@paulmillr

I've added more math extras to es6-shim: Math.log10, Math.log2, Math.log1p, Math.expm1, Math.cosh, Math.sinh, Math.tanh, Math.acosh, Math.asinh, Math.atanh, Math.hypot, Math.trunc.

@paulmillr

Needs to be added to unshimmable.md:

  • default function params
  • rest parameters
  • spread operator
  • is / isnt egal operators
  • Array comprehensions
  • Generator expressions
  • Iterators
  • Generators (yield)
  • Quasi-literals
  • RegExp "y" flag
  • Structs
@Raynos
Owner

I've kept the unshimmables inline with the experimental subset of es6 in ff/chrome.

@Yaffle

Math extras via fdlibm - https://gist.github.com/2427837

@rwaldron

Updates from last face to face TC39 meeting...

Remove:

  • String.prototype.toArray is out and will be removed from the next draft. (same as split(""))
  • typeof null === "null"; is out (too much web breaking)

Add:

  • Math.cbrt(x) as defined by:

15.8.2.32 cbrt(x)

Returns an implementation-dependent approximation to the cube root of x.

1. If x is NaN, the result is NaN. 
2. If x is +0, the result is +0. 
3. If x is -0, the result is -0.
4. If x is +Infinity, the result is +Infinity.
5. If x is -Infinity, the result is -Infinity.

@Raynos
Owner

@rwldrn thanks updated.

@rwaldron

My pleasure :)

@Raynos
Owner

Also rage at TC39 not breaking the web with null === "null" the web should just break and die ¬_¬

@Yaffle

Compare:

ES 6 draft:
15.8.2.19 log10 (x)

Returns an implementation-dependent approximation to the base 10 logarithm of x.
* If x is 1, the result is +0.
 ... other special cases ...

log10 implementation from fdlibm
http://www.netlib.org/fdlibm/e_log10.c

Special cases:
 *  log10(10**N) = N  for N=0,1,...,22.
 ... other special cases ...

why ES6 implementation for log10 does not guarante results for some special cases?
this makes it less usefull

p.s.
https://github.com/paulmillr/es6-shim/blob/master/es6-shim.js#L205 - this implementation fails for such cases too, although if you not interested in such cases, log10 can be implemented as here, without any ES6

@cscott

es6-shim now includes support for Promise and support for most uses of Iterator.

@arthurvr

Hi there! The name of the String.prototype.contains method must be changed ;-)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.