带有表达式的nodejs箭头函数

nodejs arrow function with expression

根据 documentation,您可以 return 来自箭头函数的表达式:

(param1, param2, …, paramN) => expression
     // equivalent to:  => { return expression; }

但这似乎并没有像我预期的那样工作 (nodejs 4.2.3)

> [1,2,3].map(i => i);
[ 1, 2, 3 ]
> [1,2,3].map(i => {});
[ undefined, undefined, undefined ]

第二个例子不应该 return 3 个空对象吗?还是我遗漏了什么?

根据 the docs,粗箭头函数的主体可以写成单个表达式或包裹在 {} 中的一系列语句(就像您编写普通旧函数的主体一样) .

关键是,如果解析器在 => 之后遇到 {,它会使用第二个选项。现在,无论您使用空对象文字还是完整对象文字(如本答案的第一次编辑中的 { a: 2 })都无关紧要 - 它从未被视为对象文字,仅被视为函数的主体。

如果函数没有 return 语句会怎样?对 - 这个函数 returns undefined。这就是为什么你得到其中三个作为 map 的结果(=> {}=> { a: 2 })。

要获取三个空对象,只需将 {} 包装到 () 中,如下所示:

[1,2,3].map(i => ({}));

... 因为它强制解析器使用 expression 路径。