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条目