当我写这样的东西时:
var x = [1,2,3].map(x => { a : 'hello' });
我希望收到类似[{a:'hello'},{a:'hello'},{a:'hello'}]
的内容,但会返回undefined
的列表。这是为什么?
答案 0 :(得分:7)
“对象”被视为块,因为arrow functions具有多个可接受的语法。它们包含一个包含多个语句的块:
param1 => { statements }
(param1, param2, …, paramN) => { statements }
实际上,您当前的代码被解释为具有label和字符串表达式的块,而不是对象文字。因此,您的回调函数不会返回任何内容,并且您的数组将成为undefined
s。
将其包装在括号中,使其是表达式并解释为对象文字(因为块不是表达式,它们是语句,分组内的代码必须是表达式):
var x = [1,2,3].map(x => ({ a : 'hello' }));
答案 1 :(得分:3)
你需要在对象周围加上一些括号,否则你会得到block statement label。
要防止箭头函数中的块语句,您需要使用grouping operator将表达式作为返回值。
var x = [1, 2, 3].map(x => ({ a: 'hello' }));
console.log(x);

答案 2 :(得分:1)
您需要将返回的对象放在括号中:
var x = [1,2,3].map(x => ({ a : 'hello' }));
否则,花括号中的代码将被视为函数体。
答案 3 :(得分:0)
var x = [1,2,3].map(x => ({ a : 'hello' }));