Javascript 为什么';t数组#map返回正确的数组?

Javascript 为什么';t数组#map返回正确的数组?,javascript,arrays,ecmascript-6,Javascript,Arrays,Ecmascript 6,当我这样写的时候: var x = [1,2,3].map(x => { a : 'hello' }); 我希望收到类似于[{a:'hello'},{a:'hello'},{a:'hello'}]的内容,但它会返回一个未定义的列表。为什么会这样 您需要在对象周围加上一些括号,否则您会得到一个带有的 要防止在arrow函数中使用block语句,需要使用获取表达式作为返回值 varx=[1,2,3].map(x=>({a:'hello'})); 控制台日志(x)将“对象”视为块,因为它有多

当我这样写的时候:

var x = [1,2,3].map(x => { a : 'hello' });
我希望收到类似于
[{a:'hello'},{a:'hello'},{a:'hello'}]
的内容,但它会返回一个未定义的
列表。为什么会这样


您需要在对象周围加上一些括号,否则您会得到一个带有的

要防止在arrow函数中使用block语句,需要使用获取表达式作为返回值

varx=[1,2,3].map(x=>({a:'hello'}));
控制台日志(x)将“对象”视为块,因为它有多个可接受的语法。它们包括一个包含多个语句的块:

param1 => { statements }
(param1, param2, …, paramN) => { statements }
实际上,您当前的代码被解释为带有和字符串表达式的块,而不是对象文字。因此,您的回调不会返回任何内容,您的数组将变成一个
未定义的
数组

将其括在括号中,使其成为表达式并解释为对象文字(因为块不是表达式,而是语句,分组中的代码必须是表达式):


您需要将返回的对象放在括号中:

var x = [1,2,3].map(x => ({ a : 'hello' }));
否则,大括号中的代码将被视为函数体。

var x=[1,2,3].map(x=>({a:'hello'}))
var x = [1,2,3].map(x => ({ a : 'hello' }));
var x = [1,2,3].map(x => ({ a : 'hello' }));