【别光顾着玩Swift】ES5,ES6,ES7/ES8特性和支持

Dexter.Yy 2014-06-13 08:47:35
最近为mo/lang增加了es6新特性的shim(What is a Polyfill?, Shim vs PolyfillExtend the Web Forward),跟之前的一些shim库相比更简单清晰实用,为了方便说明新特性的分类和支持,弄了下面这个文档(推荐看更清晰的gist版):

# ECMAScript Features, Support and Shims

## ES7 / ES8

* `Object.observe`
    * 原生支持: chrome,node-harmony
    * 替代:NervJS, WatchJS, Polymer/observe-js
* Typed Object / binary data
* Parallel API / River Trail
* Concurrency and Distribution / Vat
* Event streams?
* Completing classes?
* SES(SecureEcmaScript)?

## ES6

### 重大进步,无替代,无法shim:

* Generator (`yield`)
    * 原生支持: firefox, chrome-experimental, node-harmony
    * 编译器支持:traceur
* Iterator + `for..of`
    * 原生支持: firefox
    * 编译器支持:traceur
* `Proxy`
    * 原生支持: firefox
* `Reflect`
* Proper Tail Calls

### 重大进步,可部分替代,可部分shim:

* `Symbol`
    * 原生支持: chrome-experimental, node-harmony
* `Map` + `Set` + `WeakMap` + `WeakSet`
    * 原生支持: ie11/firefox(不支持WeakSet), chrome(不支持Map、Set), node-harmony
    * require('mo/lang/es6') / require('mo/lang/es6-collection')支持:
        * `Map#get` / `Map#set` / `Map#delete` / `Map#clear` / `Map#has` / `Map#size` / `Map#forEach`
        * `WeakMap#get` / `WeakMap#set` / `WeakMap#delete` / `WeakMap#clear` / `WeakMap#has`
        * `Set#add` / `Set#delete` / `Set#clear` / `Set#has` / `Set#size` / `Set#forEach`
        * `WeakSet#add` / `WeakSet#delete` / `WeakSet#clear` / `WeakSet#has`
    * 弱引用/垃圾回收特性无法shim
    * `#entries` / `#keys` / `#values` 需要Iterator,无法shim
    * 其他shim:paulmillr/es6-shim, WebReflection/es6-collections

### 很有用,可替代,可shim:

* `Promise`
    * 原生支持: firefox, chrome
    * require('mo/lang/es6') / require('mo/lang/es6-promise')支持
    * 其他shim:paulmillr/es6-shim, jakearchibald/es6-promise, getify/native-promise-only
    * 替代:EventMaster, Q, when, RSVP
* Array + Number + String + Object APIs
    * 原生支持: firefox(不支持Object.assign), chrome-experimental(不支持Array.from、Array.of、fromCodePoint)
    * require('mo/lang/es6') / require('mo/lang/es6-utils')支持:
        * `Array#find` / `Array#findIndex` / `Array#fill` / `Array#copyWithin`
        * `Array.of` / `Array.from`
        * `String#startsWith` / `String#endsWith` / `String#contains` / `String#repeat`
        * `Number.MAX_SAFE_INTEGER` / `Number.MIN_SAFE_INTEGER` / `Number.EPSILON` / `Number.isFinite` / `Number.isInteger` / `Number.isSafeInteger` / `Number.isNaN`
        * `Object.is` / `Object.assign`
    * require('mo/lang/es6') / require('mo/lang/es6-utils')不支持:
        * `Object.setPrototypeOf`, `String.fromCodePoint`, `String#codePointAt`
    * 其他shim:paulmillr/es6-shim, other standalone shims
* Math APIs
    * 原生支持: firefox, chrome-experimental
    * 使用场景有限,不包含在require('mo/lang/es6-utils')
    * paulmillr/es6-shim支持

### 有用,可替代,无法shim,原生支持进展慢:

* `module` + `Loader`
    * 编译器支持:traceur, es6-module-transpiler
    * 需要编译器的shim支持:es6-module-loader+SystemJS
    * 替代:AMD, CJS

### 有用,无替代,无法shim

* `let`
    * 原生支持: ie11、firefox, chrome ,node-harmony
* `const`
    * 原生支持: ie11, firefox, chrome, safari, node

### 无新功能的语法糖,可替代,无法shim:

* Arrows
* Comprehensions
* Destructuring
* Default + Rest + Spread Parameters
* Enhanced Object Literals(`__proto__`)
* Block-level function declaration
* Template Strings(`${name}`)
* `class`

## ES5 + ES5.1

原生支持:ie9+(9不支持strict mode)、firefox4+、safari5.1+、chrome7+(19开始支持strict mode), node

### 很有用,可替代,可shim:

* Array + String + Object + Date APIs
    * require('mo/lang/es5')支持:
        * `Array#forEach` / `Array#map` / `Array#filter` / `Array#reduce` / `Array#reduceRight` / `Array#some` / `Array#every` / `Array#indexOf` / `Array#lastIndexOf` / `Array.isArray`
        * `String#trim`
        * `Date.now`
        * `Object.keys` / `Object.getPrototypeOf`
    * require('mo/lang/es5')不支持:
        * `Number#toFixed` / `String#split` / `Date.parse` / `Date#toJSON` / `Date#toISOString`
    * 其他shim:es5-shim
* `JSON`

### 很有用,可部分替代,可部分shim:

* `Object.create` / `Function#bind`
    * require('mo/lang/es5')支持
    * 其他shim:es5-shim

### 有用,无替代,无法shim:

* `Object.defineProperty` / `Object.defineProperties` / `Object.seal` / `Object.freeze` / `Object.preventExtensions` / `Object.isSealed` / `Object.isFrozen` / `Object.isExtensible` / `Object.getOwnPropertyDescriptor` / `Object.getOwnPropertyNames`
* Getter / Setter

### 无新功能的语法,可替代,无法shim:

* Strict mode
* `"foobar"[3]`
* `{ if: 1 }`
Dexter.Yy
作者Dexter.Yy
34日记 18相册

全部回应 0 条

添加回应

Dexter.Yy的热门日记

豆瓣
免费下载 iOS / Android 版客户端