返回哈希时出现意外的令牌 { 错误

Unexpected token { error when returning hash

本文关键字:令牌 错误 意外 哈希时 返回      更新时间:2023-09-26

在我的反应代码中,我有以下返回哈希的方法:

foo: function() {
     return {{a: 1,b: 2,c: 3}, {d: 4}};
}

然而,在return声明的行上,我得到了这个:

Parse Error: Line 141: Unexpected token { while parsing file

为什么会这样?

您会收到该错误,因为当解析器看到第一个" { "时,它希望找到下一个,但会找到另一个" { ",这是无效的语法。请参阅对象文本的正确语法。

由于提供的代码中没有任何足够的描述性来告诉您在尝试返回哈希之外要返回的内容,因此我只能猜测您打算返回 4 个命名数字:

return { a:1, b:2, c:3, d:4 };

或两个带有命名数字的嵌套对象;在这种情况下,您必须为每个嵌套对象提供一个键

return { nested_a: { a:1, b:2, c:3 }, nexted_b: { d:4 } };

若要了解原因,请考虑将从 foo 函数接收返回值的代码。

var foo_result = foo();
如果你想

访问a,例如,你会如何引用它?对于你返回的原始对象({ { a:1, b:2, c:3 }, { d:4 } }(,将无法引用包含abc的第一个内部对象。

var a_result = foo_result.?.a; // no way to get at that variable

这就是为什么对象中的每个属性都需要一个。按照我上面的例子:

var a_result = foo_result.nested_a.a; // this works

关于数组声明的注意事项

当您看到声明如下的数组文本时:

var an_array = [ { a:1, b:2, c:3 }, { d:4 } ];

这是可以的,因为数组有一种隐式的方式来引用它们的元素;通过它们的索引

var a_result = an_array[ 0 ].a; // array indices start at 0