【问题标题】:JavaScript syntax issue: [{ }] hierarchyJavaScript 语法问题:[{ }] 层次结构
【发布时间】:2014-04-20 10:28:10
【问题描述】:

我遇到了以下嵌套数组,对它为什么使用这种特殊语法有点困惑:

var allQuestions = [{
   question: "Which company first implemented the JavaScript language?",
   choices: ["Microsoft Corp.", "  Sun Microsystems Corp.", "Netscape Communications Corp."],
   correctAnswer: 2
}];

完整示例:http://jsfiddle.net/alxers/v9t4t/

这是常见的做法吗? [{...}] 已经声明了这样一个变量?

【问题讨论】:

  • 这是一个包含单个对象的数组。很好,假设稍后会添加更多对象。否则您将如何创建包含对象的数组?
  • 完全没问题,它代表了一个对象数组。

标签: javascript arrays syntax nested


【解决方案1】:

定义是一个包含对象字面量的数组。它不是真正的嵌套数组。

{
 question: "Which company first implemented the JavaScript language?",
 choices: ["Microsoft Corp.", "  Sun Microsystems Corp.", "Netscape Communications Corp."],
 correctAnswer: 2
}

是一个对象文字,您的数组包含它。在您链接的小提琴中,allQuestions 数组中定义了其中的几个。通过这样做,可以很容易地遍历问题数组并依次显示每个问题。

【讨论】:

  • 感谢您解决这个问题!我理解使用数组来显示单个问题的概念。我想我对对象文字的组合有点困惑。
【解决方案2】:

正在发生的事情是在数组中列出对象,例如:

[{id:1, value:"any"}, {id:2, value:"any any"}]

所以这里我们声明了一个包含两个对象的数组。另一种所谓的“传统”方法是:

var arr = [];
var obj1 = {id:1, value:"any"};
arr.push(obj1);
...

【讨论】:

    【解决方案3】:

    allQuestions 变量应该是“问题数组”,其中每个问题都是具有questionchoicescorrectAnswer 等属性的对象。

    如果它被声明为var allQuestions = {question: ..., choice: ...},它将只是一个对象。想知道问题数量的更多代码allQuestions.length 或访问例如第一个问题的测试为allQuestions[0].question 不起作用。

    尝试添加更多问题,您会看到额外的括号是做什么用的:

    var allQuestions = [
      { question: "1st...", ...},
      { question: "2nd...", ...},
      ...
    ];
    

    【讨论】:

    • 我意识到这很简单。正如您所提到的,它应该是一个“问题数组”,它实际上是在小提琴示例中。我的简化代码并没有说清楚。谢谢!
    【解决方案4】:

    allQuestions 只是一个对象数组,是的,这是常见的做法。

    【讨论】:

    • 谢谢,但我不明白:问题是“使用 [{...}] 声明了这样一个变量是常见的做法吗?”所以我回答“..是的,这是常见的做法。”
    猜你喜欢
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    • 2017-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-06
    相关资源
    最近更新 更多