标签: ecmascript-harmony

如何将Set转换为Array?

套装似乎是一个很好的方式来创建保证唯一的元素数组,但它不公开任何好的办法来获取属性,除了发电机[设置] .values,被称为在一个尴尬的方式mySet.values.next().

如果您可以map在集合上调用和类似的函数,那就没问题了.但你也不能这样做.

我试过了Array.from,但似乎只是将类似数组(NodeList和TypedArrays?)的对象转换为Array.另一个尝试:Object.keys对Sets不起作用,而Set.prototype没有类似的静态方法.

所以,问题:是否有任何方便的内置方法来创建具有给定Set值的数组?(元素的顺序并不重要).

如果没有这样的选择,那么也许有一个很好的惯用的单行代码呢?喜欢,使用for...of或类似?

javascript arrays collections syntax ecmascript-harmony

427
推荐指数
5
解决办法
21万
查看次数

我什么时候应该在ECMAScript 6中使用箭头功能?

这个问题针对的是那些在即将到来的ECMAScript 6(Harmony)背景下已经考虑过代码风格并且已经使用过该语言的人.

有了() => {}function () {}我们有两种非常相似的方法来编写ES6中的函数.在其他语言中,lambda函数通常通过匿名来区分自己,但在ECMAScript中,任何函数都可以是匿名的.这两种类型中的每一种都具有唯一的使用域(即,当this需要明确地绑定或明确地不绑定时).在这些域之间存在大量的情况,其中任何一种符号都可以.

ES6中的箭头功能至少有两个限制:

  • 不要工作 new
  • 固定this在初始化时限制范围

抛开这两个限制,箭头函数理论上几乎可以在任何地方替换常规函数.在实践中使用它们的正确方法是什么?是否应使用箭头功能,例如:

  • "他们工作的每个地方",即在任何地方,函数不必对this变量不可知,我们不创建对象.
  • 只有"需要的任何地方",即事件监听器,超时,需要绑定到某个范围
  • 具有'短'功能但不具有'长'功能
  • 仅适用于不包含其他箭头功能的功能

我正在寻找的是在ECMAScript的未来版本中选择适当的函数符号的指南.该指南需要明确,以便可以向团队中的开发人员讲授,并保持一致,这样就不需要从一个函数符号到另一个函数符号进行不断的重构.

javascript lambda ecmascript-harmony ecmascript-6 arrow-functions

379
推荐指数
6
解决办法
8万
查看次数

将符号引入ES6的动机是什么?

更新:最近一篇来自Mozilla精彩文章出现了.如果你好奇,请阅读它.

您可能知道他们计划在ECMAScript 6中包含新的Symbol原语类型(更不用说其他一些疯狂的东西).我一直认为:symbolRuby 中的概念是不必要的; 我们可以轻松地使用纯字符串,就像我们在JavaScript中一样.现在他们决定用JS复杂化JS.

我不明白动机.有人可以向我解释我们是否真的需要JavaScript中的符号吗?

javascript symbols ecmascript-harmony ecmascript-6

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

克隆除一个键之外的js对象

我有一个扁平的JS对象:

{a: 1, b: 2, c: 3, ..., z:26}
Run Code Online (Sandbox Code Playgroud)

我想克隆除一个元素之外的对象:

{a: 1, c: 3, ..., z:26}
Run Code Online (Sandbox Code Playgroud)

最简单的方法是什么(如果可能,最好使用es6/7)?

javascript ecmascript-harmony ecmascript-6 ecmascript-7

237
推荐指数
16
解决办法
13万
查看次数

单行从ES 6中的对象获取一些属性

如何编写一个函数,在ES6中以最紧凑的方式只占用少量属性?

我已经提出了使用解构+简化对象文字的解决方案,但我不喜欢在代码中重复的字段列表.

有更薄的解决方案吗?

(v) => {
    let { id, title } = v;
    return { id, title };
}
Run Code Online (Sandbox Code Playgroud)

javascript destructuring ecmascript-harmony ecmascript-6 ecmascript-next

145
推荐指数
7
解决办法
5万
查看次数

如何为JavaScript Set自定义对象相等性

新的ES 6(Harmony)引入了新的Set对象.Set使用的身份算法类似于===运算符,因此不太适合比较对象:

var set = new Set();
set.add({a:1});
set.add({a:1});
console.log([...set.values()]); // Array [ Object, Object ]
Run Code Online (Sandbox Code Playgroud)

如何自定义Set对象的相等性以进行深层对象比较?有没有像Java这样的东西equals(Object)

javascript set ecmascript-harmony

142
推荐指数
5
解决办法
3万
查看次数

是否存在在ES6(ECMAScript 6)中循环x次而没有可变变量的机制?

x在JavaScript中循环时间的典型方法是:

for (var i = 0; i < x; i++)
  doStuff(i);
Run Code Online (Sandbox Code Playgroud)

但我不想使用++运算符或根本没有任何可变变量.那么,在ES6中,有x另一种方式循环时间吗?我喜欢Ruby的机制:

x.times do |i|
  do_stuff(i)
end
Run Code Online (Sandbox Code Playgroud)

在JavaScript/ES6中有类似的东西吗?我可以作弊并制造自己的发电机:

function* times(x) {
  for (var i = 0; i < x; i++)
    yield i;
}

for (var i of times(5)) {
  console.log(i);
}
Run Code Online (Sandbox Code Playgroud)

我当然还在用i++.至少它看不见:),但我希望在ES6中有更好的机制.

javascript generator ecmascript-harmony ecmascript-6

132
推荐指数
11
解决办法
7万
查看次数

JavaScript双冒号(绑定运算符)

如您所知,有一个.bind()功能快捷方式的建议,所以您可以写:

::this.handleStuff
Run Code Online (Sandbox Code Playgroud)

它将在es5中像那样工作:

this.handleStuff.bind(this)
Run Code Online (Sandbox Code Playgroud)

我的问题是:这样可以传递参数吗?

我的意思是用上述快捷方式编写这个方法:

this.handleStuff.bind(this, 'stuff')
Run Code Online (Sandbox Code Playgroud)

这在React中是一个非常常见的模式,所以稍微缩短它会很好.

javascript ecmascript-harmony ecmascript-next

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

迭代范围的功能方式(ES6/7)

以更多功能方式执行以下操作的最佳方法是什么(使用ES6/ES7)

let cols = [];
for (let i =0; i <= 7; i++) {
   cols.push(i * i);
}
return cols;
Run Code Online (Sandbox Code Playgroud)

我试过,

return [ ...7 ].map(i => {
  return i * i;
});
Run Code Online (Sandbox Code Playgroud)

但那转化为

[].concat(7).map(function (n) {
  return n * n;
});
Run Code Online (Sandbox Code Playgroud)

这不是我的预期.

编辑:

@pavlo.的确,这是一个错误.我正在使用JSX,例如,我想要7个div,(未经测试)

let cols = [];
    for (let i =0; i <= 7; i++) {
       cols.push(<div id={i}> ...  </div>)
    }
    return cols;
Run Code Online (Sandbox Code Playgroud)

所以这个想法确实是为了减少临时变量和程序感觉的数量.

javascript functional-programming ecmascript-harmony ecmascript-6

108
推荐指数
3
解决办法
7万
查看次数

ES6 Map和WeakMap有什么区别?

看看这个这个 MDN页面,似乎地图和WeakMaps之间的唯一区别是WeakMaps缺少"大小"属性.但这是真的吗?他们之间有什么区别?

javascript ecmascript-harmony weakmap ecmascript-6

83
推荐指数
6
解决办法
2万
查看次数