标签: ecmascript-harmony

ES6对象中的方法:使用箭头函数

在ES6中,这两个都是合法的:

var chopper = {
    owner: 'Zed',
    getOwner: function() { return this.owner; }
};
Run Code Online (Sandbox Code Playgroud)

并且,作为速记:

var chopper = {
    owner: 'Zed',
    getOwner() { return this.owner; }
}
Run Code Online (Sandbox Code Playgroud)

是否可以使用新的箭头功能?在尝试类似的东西

var chopper = {
    owner: 'John',
    getOwner: () => { return this.owner; }
};
Run Code Online (Sandbox Code Playgroud)

要么

var chopper = {
    owner: 'John',
    getOwner: () => (this.owner)
};
Run Code Online (Sandbox Code Playgroud)

我收到一条错误消息,提示该方法无权访问this.这只是一个语法问题,还是你不能在ES6对象中使用fat-pipe方法?

javascript ecmascript-harmony ecmascript-6

70
推荐指数
3
解决办法
2万
查看次数

如何从ES6类中创建迭代器

我将如何以与JS1.7 SomeClass.prototype.__iterator__ = function() {...}语法相同的方式从ES6类中创建迭代器?

[编辑16:00]

以下作品:

class SomeClass {
    constructor() {
    }

    *[Symbol.iterator]() {
        yield '1';
        yield '2';
    }

    //*generator() {
    //}

}

an_instance = new SomeClass();
for (let v of an_instance) {
    console.log(v);
}
Run Code Online (Sandbox Code Playgroud)

WebStorm标记*[Symbol.iterator]()在asterix后面直接显示"函数名称预期"警告,但是否则会编译并与Traceur一起运行.(注意WebStorm不会生成任何错误*generator().)

javascript ecmascript-harmony ecmascript-6

59
推荐指数
5
解决办法
2万
查看次数

ECMAScript 6中是否需要"使用严格"?

我想知道什么时候ECMAScript 6来了,我们还需要在js代码中加入"use strict"吗?

javascript ecmascript-harmony

44
推荐指数
1
解决办法
5726
查看次数

ECMAScript:Harmony/ES6到JavaScript编译器

在阅读了彼得关于JavaScript的文章后,我注意到了

Brendan Eich表示,Harmony的目标之一是成为JavaScript编译器的更好目标.

目前有两个流行的编译器有一些模糊的ES:符合Harmony:

虽然CoffeeScript有一些合规性,但它并不是设计成ES:Harmony编译器,所以它对此没有用.

Tracuer似乎更严格地坚持ES:Harmony规范,但我不知道它是否打算成为一个完整的ES:Harmony编译器.

由于目标是将ES6编译为ES3,因此还需要支持ES5功能(并且可能需要支持将ES5编译为ES3或ES6至ES3).

  1. 目前是否还有其他旨在创建完整ES的项目:与ES3编译器兼容?
  2. 知道标准是年轻/不稳定/不断变化,开始编写这样的编译器是明智的吗?
  3. 目前有没有ES5 - > ES3编译器?

我在Traceur邮件列表上留下了一个问题.

这种编译器的目的是向后兼容ES3.在ES3中没有完全模拟ES5和ES6.

javascript compiler-construction ecmascript-harmony

43
推荐指数
3
解决办法
2万
查看次数

ES6生成器函数中星号(*)的用途是什么?

有人可以向我解释一下:为什么ES6中的发电机功能标有星号符号?

例如,而不是:

function *someGenerator() {
    yield 1;
    yield 2;
    yield 3;
}
Run Code Online (Sandbox Code Playgroud)

我们可以写:

function someGenerator() {
    yield 1;
    yield 2;
    yield 3;
}
Run Code Online (Sandbox Code Playgroud)

甚至:

var someGenerator = () => {
    yield 1;
    yield 2;
    yield 3;
}

var someObject = {

    someGenerator() {
        yield 1;
        yield 2;
        yield 3;
    }
}            
Run Code Online (Sandbox Code Playgroud)

JS编译器可以在分析时检测到someGenerator包含yield运算符,并从该函数生成一个生成器.

为什么检测yield存在不够?

javascript ecmascript-harmony ecmascript-6

43
推荐指数
2
解决办法
1万
查看次数

我什么时候应该使用let和var?

编辑:请阅读问题!我已经知道区别了.这不是重复的.

显然,现在我应该总是使用var关键词,因为let一切都不支持.

当let关键字有更好的支持时(比方说,我在几年内使用Harmony编写Node应用程序),我什么时候应该使用let关键字vs var关键字?

我理解差异 - var用于函数范围let而是用于块作用域 - 但我正在寻找像"总是使用let关键字"或" var在函数顶部使用关键字,但在for循环中使用let关键字"之类的东西.

javascript variables ecmascript-harmony ecmascript-6

38
推荐指数
3
解决办法
2万
查看次数

使用JavaScript ES6箭头功能的即时功能

有谁知道如何使用ES6箭头语法编写立即函数?

这是ES3/5的做法:

(function () {
   //...
}());
Run Code Online (Sandbox Code Playgroud)

我尝试了以下但unexpected token在最后一行得到错误.

(() => {
  //...
}());
Run Code Online (Sandbox Code Playgroud)

你可以在这里测试一下:http://www.es6fiddle.net/hsb8bgu4/

javascript function ecmascript-harmony ecmascript-6 arrow-functions

35
推荐指数
2
解决办法
1万
查看次数

使用元组或对象映射

我正在尝试使用新的(ES6)Map对象来表示属性和值之间的映射.

我有类似于以下形式的对象:

 {key1:value1_1,key2:value2_1},..... {key1:value1_N,key2:value2_N}
Run Code Online (Sandbox Code Playgroud)

我想根据key1 key2值它们进行分组.

举例来说,我希望能够以组以下的xy:

[{x:3,y:5,z:3},{x:3,y:4,z:4},{x:3,y:4,z:7},{x:3,y:1,z:1},{x:3,y:5,z:4}]
Run Code Online (Sandbox Code Playgroud)

并获取包含以下内容的Map:

{x:3,y:5} ==>  {x:3,y:5,z:3},{x:3,y:5,z:4}
{x:3,y:4} ==>  {x:3,y:4,z:4},{x:3,y:4,z:7}
{x:3,y:1} ==>  {x:3,y:1,z:1}
Run Code Online (Sandbox Code Playgroud)

在Python中,我使用元组作为字典键.ES6映射允许任意对象作为键,但使用标准相等算法(===),因此对象只能通过引用来区分我所知道的.

如何使用ES6地图完成这种分组?或者,如果有一种我忽略的优雅方式,使用普通JS对象的解决方案.

我宁愿不使用外部集合库 - 但如果有一个更好的解决方案使用我也有兴趣了解它.

javascript equality map ecmascript-harmony

30
推荐指数
2
解决办法
8292
查看次数

是否可以将ECMAScript 6发生器重置为其初始状态?

我的问题是:鉴于提供的(非常简单的)生成器,是否可以将生成器恢复到其原始状态以便再次使用?

var generator = function*() {
    yield 1;
    yield 2;
    yield 3;
};

var iterable = generator();

for (let x of iterable) {
    console.log(x);
}

// At this point, iterable is consumed.
// Is there a method for moving iterable back
// to the start point by only without re-calling generator(),
// (or possibly by re-calling generator(), only by using prototype 
//  or constructor methods available within the iterable object)
// so the following code would work again?

for (let …
Run Code Online (Sandbox Code Playgroud)

javascript generator ecmascript-harmony ecmascript-6

30
推荐指数
5
解决办法
5581
查看次数

ES5 Object.assign等价物

我想做一些非常直接的事情Object.assign.

var firstObj = {name : "Saba H.", rollNo : 1};
var secondObj = {college : "WCE"};
var wholeObj = Object.assign(firstObj, secondObj);

console.log(wholeObj); // {name : "Saba H.", rollNo : 1, college : "WCE"}
Run Code Online (Sandbox Code Playgroud)

作为Object.assignECMAScript6和声提案的一部分,并且在许多浏览器中都不支持,是否可以使用ES5?如果没有,那么有没有微型图书馆?

javascript object ecmascript-5 ecmascript-harmony

26
推荐指数
3
解决办法
1万
查看次数