Questions tagged «ecmascript-harmony»

ECMAScript Harmony是旨在扩展当前ECMA-262规范的提案的代号。

10
如何将Set转换为Array?
Set似乎是一种创建具有保证唯一元素的Array的好方法,但是它没有公开任何获取属性的好方法,除了Generator [Set] .values之外,后者以尴尬的方式调用mySet.values.next()。 如果可以map在Set上调用和类似的函数,那应该没问题。但是您也不能那样做。 我试过了Array.from,但似乎只是将类似数组的对象(NodeList和TypedArrays?)转换为Array。另一种尝试:Object.keys不适用于Set,并且Set.prototype没有类似的静态方法。 因此,问题是:是否存在任何方便的内置方法来创建具有给定Set值的Array?(元素的顺序并不重要)。 如果不存在这样的选择,那么也许有一个很好的惯用单行代码?喜欢,使用for...of还是类似?

9
什么时候应该在ECMAScript 6中使用Arrow函数?
这个问题针对的是那些在即将到来的ECMAScript 6(Harmony)中考虑过代码风格并且已经使用过该语言的人。 通过() => {}和,function () {}我们得到了两种非常相似的方法来在ES6中编写函数。在其他语言中,lambda函数通常通过匿名来区分自己,但是在ECMAScript中,任何函数都可以是匿名的。两种类型中的每一种都有唯一的使用域(即,当this需要显式绑定或显式不绑定时)。在这些域之间,有很多情况下两种表示法都会起作用。 ES6中的箭头功能至少有两个限制: 不要用工作new创建时,不能使用prototype 固定this绑定到初始化范围 除了这两个限制,箭头函数在理论上几乎可以替换任何地方的常规函数​​。在实践中使用它们的正确方法是什么?应该使用箭头功能,例如: “无论它们在哪里工作”,即在每个地方函数不必与this变量无关,我们也没有创建对象。 仅需要绑定到特定范围的“任何需要它们的地方”,即事件侦听器,超时 具有“短”功能但不具有“长”功能 仅对于不包含另一个箭头功能的功能 我正在寻找的是在将来的ECMAScript版本中选择适当的功能符号的指南。指南必须明确,以便可以向团队中的开发人员讲授,并且要保持一致,以便不需要从一个功能符号到另一个功能符号之间不断地来回重构。

7
将符号引入ES6的动机是什么?
更新:最近有来自Mozilla的精彩文章出现。好奇的话请阅读。 如您所知,他们计划在ECMAScript 6中包括新的Symbol原语类型(更不用说其他疯狂的东西了)。我一直认为:symbolRuby 中的这个概念是不必要的。我们可以像使用JavaScript一样轻松地使用纯字符串。现在,他们决定将JS中的内容复杂化。 我不明白动机。有人可以向我解释我们是否真的需要JavaScript中的符号?


9
如何为JavaScript Set自定义对象相等性
新的ES 6(和谐)引入了新的Set对象。Set使用的身份算法类似于===运算符,因此不太适合比较对象: var set = new Set(); set.add({a:1}); set.add({a:1}); console.log([...set.values()]); // Array [ Object, Object ] 如何自定义Set对象的相等性以进行深层对象比较?有没有像Java一样的东西equals(Object)?

18
是否有一种机制在ES6(ECMAScript 6)中循环x次而没有可变变量?
xJavaScript中循环时间的典型方法是: for (var i = 0; i < x; i++) doStuff(i); 但我根本不想使用++运算符或根本没有任何可变变量。那么在ES6中是否有x另一种方法可以循环计时?我喜欢Ruby的机制: x.times do |i| do_stuff(i) end JavaScript / ES6有什么相似之处吗?我可以作弊,然后自己制作发电机: function* times(x) { for (var i = 0; i < x; i++) yield i; } for (var i of times(5)) { console.log(i); } 当然我还在用i++。至少它不可见:),但是我希望ES6中有更好的机制。


1
JavaScript双冒号(绑定运算符)
如您所知,有一个.bind()功能快捷方式的建议,因此您可以编写: ::this.handleStuff 它将在es5中像这样工作: this.handleStuff.bind(this) 我的问题是:是否可以通过这种方式传递参数? 我的意思是用上述快捷方式编写此代码的方法: this.handleStuff.bind(this, 'stuff') 这是React中很常见的模式,因此最好将其缩短一点。

6
ES6对象中的方法:使用箭头功能
在ES6中,这两个都是合法的: var chopper = { owner: 'Zed', getOwner: function() { return this.owner; } }; 并且,作为速记: var chopper = { owner: 'Zed', getOwner() { return this.owner; } } 是否可以使用新的箭头功能?在尝试类似 var chopper = { owner: 'John', getOwner: () => { return this.owner; } }; 要么 var chopper = { owner: 'John', getOwner: …


6
如何用ES6类制作迭代器
如何以与JS1.7SomeClass.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); } WebStorm标志*[Symbol.iterator]()在星号后直接带有“预期的功能名称”警告,但否则,此函数可以编译并在Traceur中正常运行。(请注意,WebStorm不会为生成任何错误*generator()。)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.