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

Javascript 如果JSON数组是一个对象,为什么它会列在原语中?,javascript,json,node.js,Javascript,Json,Node.js,当我第一次阅读JSON格式规范时,我的印象是对象是键值对的集合(值可以是任何类型),数组是相同类型的零个或多个元素的集合 对象(混合值): 阵列(单一类型): 我遇到了一些示例,其中包括具有混合类型元素的数组。在Node.js中测试这是合法的之后,我不禁要问:为什么有两种不同的集合类型如此相似 数组(混合类型): 我能看到的唯一主要区别是数组不需要为每个“值”都使用“键”。还有其他显著差异吗 编辑: 考虑到原始问题的重复性,数组是一个修饰过的对象,我稍微修改了这个问题。(对最初的回答表示歉意。)

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

对象(混合值):

阵列(单一类型):

我遇到了一些示例,其中包括具有混合类型元素的数组。在Node.js中测试这是合法的之后,我不禁要问:为什么有两种不同的集合类型如此相似

数组(混合类型):

我能看到的唯一主要区别是数组不需要为每个“值”都使用“键”。还有其他显著差异吗

编辑
考虑到原始问题的重复性,数组是一个修饰过的对象,我稍微修改了这个问题。(对最初的回答表示歉意。)

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

可能重复/参考问题:

数组是具有方便方法的对象

当然,除了它们的性质之外,您还需要一个有序的结构,您可以在[array]上迭代,以及一个key:value集合,您希望通过点或括号符号[
someObj.someKey
someObj[someKey]
]访问其值

数组是具有方便方法的对象

当然,除了它们的性质之外,您还需要一个有序的结构,您可以在[array]上迭代,以及一个key:value集合,您希望通过点或括号符号[
someObj.someKey
someObj[someKey]
]访问其值

数组是具有方便方法的对象

当然,除了它们的性质之外,您还需要一个有序的结构,您可以在[array]上迭代,以及一个key:value集合,您希望通过点或括号符号[
someObj.someKey
someObj[someKey]
]访问其值

数组是具有方便方法的对象

除了它们的性质外,当然你还需要一个有序的结构,你可以在[array]上迭代,还有一个key:value集合,你可以通过点或括号符号[
someObj.someKey
someObj[someKey]
]来访问它的值。

一个“集合”可以有许多不同的属性(在“其行为方式”的含义中):

  • 有保证订单吗
  • 它是一个键值存储,其中的键可以是任意的吗
  • 它是同质的还是异质的
  • 它是随着你放入物品而增长还是有固定的尺寸
  • 等等等等
这些属性的任何组合都会为您提供不同类型的集合。这些集合在不同的语言中有不同的名称,如列表、元组、数组、字典、哈希、对象等。每个属性在行为、严格性、复杂性和资源使用等方面都有不同的权衡。Javascript选择实现两种类型:

  • 列表,在Javascript中称为“数组”:

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

    • 无保证订单
    • 键值关联集合
    • 可以是异质的
  • 你可以根据哪个属性对你来说是重要的来选择两者。选择通常归结为有序与无序、键值关联与键无关。请注意,Javascript对这两者的具体实现基本上都是哈希映射,因为Javascript中的所有内容都是对象,函数就是对象;而尽管如此,它们的用法在以上几点上有所不同。

    一个“集合”可以有许多不同的属性(在“其行为方式”的含义中):

    • 有保证订单吗
    • 它是一个键值存储,其中的键可以是任意的吗
    • 它是同质的还是异质的
    • 它是随着你放入物品而增长还是有固定的尺寸
    • 等等等等
    这些属性的任何组合都会为您提供不同类型的集合。这些集合在不同的语言中有不同的名称,如列表、元组、数组、字典、哈希、对象等。每个属性在行为、严格性、复杂性和资源使用等方面都有不同的权衡。Javascript选择实现两种类型:

  • 列表,在Javascript中称为“数组”:

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

    • 无保证订单
    • 键值关联集合
    • 可以是异质的
  • 你可以根据哪个属性对你来说是重要的来选择两者。选择通常归结为有序与无序、键值关联与键无关。请注意,Javascript对这两者的具体实现基本上都是哈希映射,因为Javascript中的所有内容都是对象,函数就是对象;而尽管如此,它们的用法在以上几点上有所不同。

    一个“集合”可以有许多不同的属性(在“其行为方式”的含义中):

    • 有保证订单吗
    • 它是一个键值存储,其中的键可以是任意的吗
    • 它是同质的还是异质的
    • 它是随着你放入物品而增长还是有固定的尺寸
    • 等等等等
    一个
    {
      "key": "value",
      "key2": 2
    }
    
    [1, 2, 3]
    ["one", "two", "three"]
    [
      {"key": "value"},
      {"key2": 2}
    ]
    
    [1, "two", {"three": 4}]
    
    [] instanceof Object
    > true