帮酷LOGO
0 0 评论
  • 显示原文与译文双语对照的内容
文章标签:JAVA  COM  ecma  Javascript引擎  传统  兼容性  SHIM  ECM  
ECMAScript 6 (Harmony) compatibility shims for legacy JavaScript engines

  • 源代码名称:es6-shim
  • 源代码网址:http://www.github.com/paulmillr/es6-shim
  • es6-shim源代码文档
  • es6-shim源代码下载
  • Git URL:
    git://www.github.com/paulmillr/es6-shim.git
  • Git Clone代码到本地:
    git clone http://www.github.com/paulmillr/es6-shim
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/paulmillr/es6-shim
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
  • ES6 shim

    提供兼容性垫片,以便旧版JavaScript引擎与 ECMAScript 6 ( Harmony ) 尽可能接近。

    HTML版本的final ECMAScript 6规范

    安装

    如果要在浏览器中使用:

    • 在脚本之前包含 es6-shim。
    • 如果浏览器不支持 ECMAScript 5,尤其是每个JS引擎都需要 es5-shim,因此强烈建议始终包含它。

    对于 node.jsio.js 或者任何 npm -managed工作流( 这是推荐的方法):

    
    npm install es6-shim
    
    
    
    

    替代方法:

    • component install paulmillr/es6-shim 如果你使用的是 component(1)
    • bower install es6-shim 如果你正在使用 Bower

    你可能还希望在浏览器和节点中包括 unorm ;有关详细信息,请参阅 String.prototype.normalize 部分。

    安全垫片

    数学函数的精度为 1e-11.

    • Reflect

      • apply()
      • construct()
      • defineProperty()
      • deleteProperty()
      • get()
      • getOwnPropertyDescriptor()
      • getPrototypeOf()
      • has()
      • isExtensible()
      • ownKeys()
      • preventExtensions()
      • set()
      • setPrototypeOf()
    • Symbol ( 仅在它已经存在时)

      • match ( 以及相应的String#matchString#startsWithString#endsWithString#includesRegExp 支持)
      • replace ( 以及相应的String#replace 支持)
      • search ( 以及相应的String#search 支持)
      • split ( 以及相应的String#split 支持)

    只有在引擎已经有 Symbol 支持时才会提供已知的符号。

    • String.prototype 附件B 方法
      • anchor()
      • big()
      • blink()
      • bold()
      • fixed()
      • fontcolor()
      • fontsize()
      • italics()
      • link()
      • small()
      • strike()
      • sub()
      • sup()

    这些方法是"附件b"的一部分,即它们是一个实际标准,不应该使用它们。 不过,es6-shim 提供了它们并在浏览器中标准化它们的行为。

    子类子类化

    MapSetPromise 实现是 subclassable。 应该使用以下 Pattern 在ES5中创建一个子类,该子类将继续在ES6中工作:

    require('es6-shim');functionMyPromise(exec) {
     var promise =newPromise(exec);
     Object.setPrototypeOf(promise, MyPromise.prototype);
     //.. .return promise;
    }Object.setPrototypeOf(MyPromise, Promise);MyPromise.prototype=Object.create(Promise.prototype, {
     constructor: { value: MyPromise }
    });

    String.prototype.normalize

    String.prototype.normalize 提供适当的shim 将使该库的大小增加到 4倍上。 因此,我们建议你在需要 String.prototype.normalize的情况下,将 unorm 软件包安装在 es6-shim 旁边。 有关更多讨论,请参见 https://github.com/paulmillr/es6-shim/issues/134

    WeakMap shim

    不可能在纯javascript中实现 WeakMap。 的实现不包含强值,这对于 Collection 非常重要。es6-shim 决定不包含错误的shim。

    WeakMap 有非常异常的用例,所以你可以能不需要它在所有的(。使用简单的Map )。

    正在启动

    require('es6-shim');var assert =require('assert');assert.equal(true, 'abc'.startsWith('a'));assert.equal(false, 'abc'.endsWith('a'));assert.equal(true, 'john alice'.includes('john'));assert.equal('123'.repeat(2), '123123');assert.equal(false, NaN===NaN);assert.equal(true, Object.is(NaN, NaN));assert.equal(true, -0===0);assert.equal(false, Object.is(-0, 0));var result =Object.assign({ a:1 }, { b:2 });assert.deepEqual(result, { a:1, b:2 });assert.equal(true, isNaN('a'));assert.equal(false, Number.isNaN('a'));assert.equal(true, Number.isNaN(NaN));assert.equal(true, isFinite('123'));assert.equal(false, Number.isFinite('123'));assert.equal(false, Number.isFinite(Infinity));// Tests if value is a number, finite,//> = -9007199254740992 && <= 9007199254740992 and floor(value) === valueassert.equal(false, Number.isInteger(2.4));assert.equal(1, Math.sign(400));assert.equal(0, Math.sign(0));assert.equal(-1, Math.sign(-400));var found = [5, 10, 15, 10].find(function (item) { return item /2===5; });assert.equal(10, found);var foundIndex = [5, 10, 15, 10].findIndex(function (item) { return item /2===5; });assert.equal(1, foundIndex);// Replacement for `{}` key-value storage.// Keys can be anything.var map =newMap([['Bob', 42], ['Foo', 'bar']]);map.set('John', 25);map.set('Alice', 400);map.set(['meh'], 555);assert.equal(undefined, map.get(['meh'])); // undefined because you need to use exactly the same object.map.delete('Alice');map.keys();map.values();assert.equal(4, map.size);// Useful for storing unique items.var set =newSet([0, 1]);set.add(2);set.add(5);assert.equal(true, set.has(0));assert.equal(true, set.has(1));assert.equal(true, set.has(2));assert.equal(false, set.has(4));assert.equal(true, set.has(5));set.delete(5);assert.equal(false, set.has(5));// Promises, see// http://www.slideshare.net/domenicdenicola/callbacks-promises-and-coroutines-oh-my-the-evolution-of-asynchronicity-in-javascript// https://github.com/petkaantonov/bluebird/#what-are-promises-and-why-should-i-use-themPromise.resolve(5).then(function (value) {
     assert.equal(value, 5);
     if (value) thrownewError('whoops!');
     // do some stuffreturnanotherPromise();
    }).catch(function (e) {
     assert.equal(e.message, 'whoops!');
     assert.equal(true, e instanceofError);
     // any errors thrown asynchronously end up here});

    警告

    • Object.setPrototypeOf/Reflect.setPrototypeOf
      • 注意,空对象(。Object.create(null),例如具有 null的对象为 [[Prototype]] ) 不能让它的[[Prototype]] 更改,除非通过本机 Object.setPrototypeOf
    • 众所周知的Symbol
      • 为了使它们跨领域工作,通过 Symbol.for 创建全局 Symbol 注册表。 这并不违反规范,但它确实意味着 Symbol.for('Symbol.search') === Symbol.search 将是 true,在默认情况下,它不会在新的兼容域中。

    许可证



    文章标签:COM  JAVA  Javascript  ecma  ECM  传统  兼容性  SHIM  

    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语