我最近切换到es6并开始在我的代码中使用箭头功能。 在重构时我遇到了代码
data.map(function(d) {
return {id: d.id, selected: bool};
});
我将上面的代码改为此 -
data.map((d) => {id: d.id, selected: bool});
但是我从上面的代码中得到了错误。我不知道这里有什么问题吗? 我知道如果没有代码块,则箭头函数提供隐式返回。
但是不知道如何返回空对象或匿名对象并初始化了一些属性?
修改
如果我这样做会有什么问题?只是为了好奇。
data.map((d) => new {id: d.id, selected: bool});
答案 0 :(得分:58)
将对象放在对象初始值设定项周围:
data.map((d) => ({id: d.id, selected: bool}) );
括号对其中的表达式的值没有影响,但它们 do 具有消除包含表达式的第一个标记的歧义的语法效果。如果没有括号,JavaScript解析器必须决定{
令牌是否意味着"这里启动一个函数体"或"这里启动一个对象初始化器。" 总是选择前者(即代码块)。
(
唯一可以表示的是"这里有一个表达式",以便{
在里面括号只能是"这里有一个对象初始值设定项。" (你不能在表达式中间删除一段代码,换句话说;如果你尝试,那么你会得到一个语法错误。)
答案 1 :(得分:1)
您好我认为您需要添加paranthesis来返回对象文字
//将主体括号化以返回对象文字表达式: params => ({foo:bar})
来自https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions
答案 2 :(得分:-1)
您也可以使用
data.map((d) => {
return {id: d.id, selected: bool}
} );