当前位置: 首页 > 知识库问答 >
问题:

将数组项用作对象[duplicate]中的键时出现意外的令牌错误

董高洁
2023-03-14

在Chrome中,以下JavaScript代码引发意外的令牌错误:

var somearray = ["foo","bar"];
var someassoc = {somearray[0]:somearray[1]};

抛出的错误:

Uncaught SyntaxError: Unexpected token [

相反,我希望它应该创建一个键为Somearray[0]的对象,并且该键的项为Somearray[1]

那么,为什么会这样?意外标记通常意味着括号放错了地方等,但这里不是这样。

共有2个答案

柳杰
2023-03-14

在JavaScript中,当声明对象时,键名应该始终是一个简单的字符串,例如:

var object = {'key': 'Hello World'};

但是,如果要使用动态的键名,如somearray[0],则只需将someassoc声明为对象:

var someassoc = {};

然后,通过以下操作设置键值组合:

someassoc.key = 'Hello World';

someassoc['key'] = 'Hello World';

在您的情况下将是:

someassoc[somearray[0]] = somearray[1];

仅此而已:)

姜钊
2023-03-14

JS对象文字的键必须是静态键,或者是[]中包含的表达式(需要ES2015支持)。

代码的问题是somearray[0]键无效。

因此,如果您需要ES5方式,请将其重写为

var somearray = ["foo","bar"];
var someassoc = {};
someassoc[somearray[0]] = somearray[1];

对于ES2015,您使用

var somearray = ["foo","bar"];
var someassoc = { [somearray[0]]: somearray[1]};

本标准的相关部分:

  • 12.2.6对象初始化器
  • 12.2.6.3静态语义:包含
  • 11.6.1标识符名称

简而言之:密钥必须是有效的标识符。

 类似资料:
  • 问题内容: 这是我的组件代码的片段: 但是,当我运行此代码时,在出现意外的令牌错误。为什么会发生这种情况,我该如何解决? 问题答案: 您必须将方法调用包装在JSX元素中,否则Babel不会将return语句识别为JSX或在这种情况下为内联JSX表达式。它不会将您的代码从JSX转换为纯JavaScript,因此会出现错误。实际上,它被解释为 对象文字 ,而不是您期望的内联JSX表达式: 解决方案是将

  • 问题内容: 我在解析简单的JSON字符串时遇到问题。我已经在JSONLint上检查了它们,它表明它们是有效的。但是当我尝试使用jQuery替代方法解析它们时,出现了以下错误: 注意:我正在使用PHP 对字符串进行编码。 问题答案: 您的数据已经是一个对象。无需解析。javascript解释器已经为您解析了它。

  • 问题内容: // if the box is outside the window, move it to the end function checkEdge() { var windowsLeftEdge = $(‘#window’).position().left; 我在上面提到的行上收到了UncaughtSyntaxError:意外的令牌ILLEGAL。它仅在GoogleChrome和Sa

  • 我想制作这个 我下面的代码失败了,得到预期的令牌了吗?

  • 问题内容: 我可能会缺少装载机吗?我以为我们应该能够在组件主体中使用这些ES6函数,而不必执行语法reactdocs 我的.babelrc具有以下内容: 我正在使用js / jsx文档 问题答案: 您需要使用才能使用类字段,您可以像安装它 并将其用作插件 用于其余的传播语法,例如 根据 文档 : 提出了两个相关的建议:和 。 描述打算在类的实例上存在的属性(并且可以选择包括用于所述属性的初始化器表

  • 问题内容: 更新:- 好像我必须提供返回XML的URL。这是-URL 解析xml时出现SAXParseException。我尝试解析的xml如下- 我用来解析此xml的代码如下- 我正在使用相同的代码来解析其他xml数据,并且可以正常工作。我无法理解此xml数据中的内容,这阻止了它正确地解析数据。我也在线检查了许多xml验证程序的xml。 我一定在这里想念一些明显的东西。 编辑:- 我正在尝试解析