JavaScript函数返回undefined而不是对象的文字

我刚开始使用javascript工作了一下,但很快就陷入了我眼中的一个非常简单的任务,即返回一个对象字面值。

我目前的代码看起来像这样

function wrapInObject(x) { return { y: x }; } console.log(wrapInObject('someValue')); 

但不是写对象文字到控制台它打印undefined – 我试着用数字或其他对象文字调用函数,但没有任何帮助。

谢谢你的帮助!

这是由于一个称为自动分号插入的过程,并且通常是新开发人员使用C#背景或其他语言将开头大括号放在新行上的常见混淆源。

本质上发生的是隐式分号放在你的return语句之后,这样它就返回undefined而你的对象字面从来没有被“达到”。

为了解决这个问题,只需将左括号移动到return的末尾

 function wrapInObject(x) { return { y: x }; } 

由于自动分号插入

 function wrapInObject(x) { return { y: x }; } console.log(wrapInObject('someValue')); 

被转换为

 function wrapInObject(x) { return ; // semicolon is added { y: x }; } console.log(wrapInObject('someValue')); 

因此你得到未定义。

这是因为分号自动插入在return语句之后添加换行符使得js引擎像分号一样parsing该行。 将左括号移动到与return语句相同的行。

另一个关于分号自动插入的StackOverflow条目