如果JSON数组是一个对象,为什么它在原语中列出?

时间:2014-05-20 13:53:40

标签: javascript json node.js

当我第一次阅读JSON格式规范时,我的印象是对象是键值对的集合(值为任何类型),而数组是零个或多个元素的集合。 相同的类型。

对象(混合值):

{
  "key": "value",
  "key2": 2
}

数组(单一类型):

[1, 2, 3]
["one", "two", "three"]
[
  {"key": "value"},
  {"key2": 2}
]

我遇到了一些包含带有混合类型元素的数组的示例。经过测试,这在Node.js中是合法的,我想知道:为什么有两种不同的集合类型如此相似?

数组(混合类型):

[1, "two", {"three": 4}]

我能看到的唯一主要区别是数组不需要每个“值”的“键”。还有其他重大差异吗?

修改
鉴于原件的重复问题,并且阵列是一个装扮对象,我稍微修改了这个问题。 (对原始答案道歉。)

我最好的猜测是数组非常常见,为它们添加语法和预定义类主要是为了方便。

可能的重复/参考问题:What is the difference between an array and an object?

2 个答案:

答案 0 :(得分:3)

A" collection"可以有许多不同的属性(在&#34的含义;它的行为方式"):

  • 是否有保证订单?
  • 它是一个键值存储,键可以是任意的吗?
  • 是同质的还是异质的?
  • 当你放入物品时它会增长还是有固定尺寸?
  • 等。等

这些属性的任意组合都会为您提供不同类型的集合。这些在不同的语言中以不同的语言被称为列表,元组,数组,字典,散列,对象等。每个在行为与严格性与复杂性与资源使用等方面有不同的权衡.Javascript选择实现两种类型:

  1. 列出名为"数组"在Javascript:

    • 有保证订单
    • 键仅限数字
    • 数字键是连续的(它们实际上不是,数组是稀疏的,但是当在集合上进行迭代时,它应该被认为是连续的)
    • 可以是异质的
  2. 字典,称为"对象"在Javascript:

    • 无保证订单
    • 键值关联集合
    • 可以是异质的
  3. 您可以根据哪个属性对您进行选择来选择。选择通常归结为有序与无序和键值关联,而不是关键字的相关性。注意,Javascript的两者的特定实现基本上都是哈希映射,因为Javascript中的所有东西都是一个对象,一个函数是一个对象;但是它们的用法因上述几点而有所不同。

答案 1 :(得分:0)

[] instanceof Object
> true

数组是方便方法 [see this answer]的对象。

除了它们的性质之外,当然你需要一个有序结构,你可以遍历[数组],以及一个键:值集合,你想通过点或括号表示法访问它们的值[{ {1}}或someObj.someKey]。