【问题标题】:JavaScript dictionary syntax error when injecting array element as property name [duplicate]将数组元素作为属性名称注入时JavaScript字典语法错误[重复]
【发布时间】:2019-03-15 09:18:34
【问题描述】:

我正在运行这段代码,但它给出了奇怪的结果?

let surveyTypes = [1,2];

let surveyDuration = {
  surveyTypes[0]:  'first',surveyTypes[1]:  'second' 
}

预期输出:

surveyDuration={1:'first',2:'second'}

实际输出:

Uncaught SyntaxError: Unexpected token [

【问题讨论】:

  • 您可能想改用map。地图的键将是类型保存和排序(对象文字不是)。

标签: javascript dictionary


【解决方案1】:

您必须将数组的项目wrap 放入括号,因为您正在创建dynamic 键。

let surveyTypes = [1,2];

let surveyDuration = {
  [surveyTypes[0]]:  'first',[surveyTypes[1]]:  'second' 
}

console.log(surveyDuration);

【讨论】:

  • 如果浏览器的 JS 引擎支持的话。
  • @epascarello,那么我们需要使用transpiler
  • @Mihai 我知道我们可以通过数组表示法创建动态键,但我想知道 [surveyTypes [0]] 这将返回 ["1"] 并且它工作正常,为什么surveyTypes [0] 是不能正常工作?你能解释一下吗
  • @Saurabh 这是不正确的:surveyTypes[0] 返回 1,surveyTypes[1] 返回 2,因此它创建了一个具有名为 12 的属性的对象,就像 OP @987654329 的预期输出一样@
  • @MihaiAlexandru-Ionut iam [surveyTypes[0]] 如果 iam 正确,这将返回 ["1"]?
【解决方案2】:

试试:

let surveyTypes = [1,2];

let surveyDuration = {
  [surveyTypes[0]]: 'first',
  [surveyTypes[1]]: 'second' 
}

为了评估键名,它必须在括号内。你可以阅读更多关于这个here


虽然surveyTypes[0] 确实返回1,但您不能将其作为对象键单独使用的原因纯粹是因为javascript 的语法不允许这样做。选择此语法是为了允许您编写不与表达式冲突的普通键。例如:

const obj = {
  hello: 'there'
}

const hello = 5
const obj = {
  hello: 'there'
}

请注意,如果没有括号符号,这些将是多么模棱两可。

【讨论】:

  • 请在发布广为人知的问题的重复答案之前进行搜索。
  • 问题是这样的。我没有找到与此问题相关的任何关键字。当我搜索错误名称时。我向我展示了不同的堆栈溢出问题。因此我发布了这个问题。
  • @Sunny 我的评论不是给你的,是给 MattWay 的;有了高代表,他应该更清楚这个问题已经得到了回答。无论如何,要搜索的正确名称是“对象初始值设定项中的计算属性名称”developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • @JuanMendes 我读这个问题更多的是“为什么”,而不是“如何”,并认为它应该有自己的答案,我只是在它被标记为重复之前没有完成它。标记的重复项都没有在他们的任何答案中解释原因。
  • @MattWay 我猜你的解释对我来说有点明显。
猜你喜欢
  • 2021-06-08
  • 2010-09-13
  • 1970-01-01
  • 1970-01-01
  • 2014-03-27
  • 2018-07-10
  • 2013-08-12
  • 2019-01-09
  • 1970-01-01
相关资源
最近更新 更多