JavaScript中map函数内对象字面量不生效但new Object()生效问题
箭头函数返回对象字面量问题原因说明
这是JavaScript自身的语法规则导致的,和map方法、Node.js版本无关,核心是箭头函数的大括号存在解析歧义:
- 当箭头函数后直接跟随
{}时,JS解析器会默认将{}识别为函数体代码块,而非对象字面量
你写的nums.map(n => { n })等价于下方的完整函数写法:
nums.map(function(n) { n // 仅执行单条表达式,没有return语句 // 无显式return的函数默认返回undefined })
这就是你得到的返回结果全是undefined的原因。
- 当你使用
new Object({n})写法时,{n}出现在表达式内部,解析器会正确将其识别为对象字面量,整个表达式执行后返回构造出的对象,因此结果符合预期。
正确的简写写法
如果想要用箭头函数简写语法直接返回对象字面量,只需要用小括号把对象字面量包裹起来,告诉解析器这是一个需要返回的表达式而非代码块即可:
nums.map(n => ({ n })) // 输出结果:[ { n: 1 }, { n: 2 }, { n: 3 }, { n: 4 } ]
该写法和你用new Object包裹的效果完全一致,性能更优,是JavaScript的标准推荐写法。
内容的提问来源于stack exchange,提问作者sgarg
相关产品推荐
相关产品推荐

