Javascript 什么是数组;物业清单;调用,它们与简单对象有何不同?

Javascript 什么是数组;物业清单;调用,它们与简单对象有何不同?,javascript,arrays,node.js,object,Javascript,Arrays,Node.js,Object,我在Node中玩的时候,不小心打错了花括号({}),而是放了方括号([]),并开始将变量用作简单对象。没有抛出错误,行为似乎是相同的,但当我用Object.getPrototypeOf()检查类型时,它们是不同的 > var cake = []; > cake["is_a"] = "lie"; > cake [ is_a: 'lie' ] > Object.getPrototypeOf(cake.is_a) [String: ''] > Object.getP

我在Node中玩的时候,不小心打错了花括号(
{}
),而是放了方括号(
[]
),并开始将变量用作简单对象。没有抛出错误,行为似乎是相同的,但当我用
Object.getPrototypeOf()检查类型时,它们是不同的

> var cake = [];
> cake["is_a"] = "lie";

> cake
[ is_a: 'lie' ]

> Object.getPrototypeOf(cake.is_a)
[String: '']

> Object.getPrototypeOf(cake)
[]

> Object.getPrototypeOf({})
{}
然后我认为这是数组之上的一个语法糖,但不是:

> cake[0]
undefined

它让我想起Elixir的关键字列表或Erlang的属性列表。它们叫什么?(这样我可以进一步搜索。)这些是特定于节点的吗?

正如Pointy和Jaromanda X在问题注释中指出的那样,在JavaScript中,除了:

最新的ECMAScript标准定义了七种数据类型:

  • 六种数据类型是原语

    • Boolean
    • Null
    • 未定义
    • 编号
    • String
    • 符号
      (ECMAScript 2015中新增)
  • 对象

(另见有关问题)

我的问题的代码样本具有欺骗性(至少对我而言),因为它看起来像数组本身存储了什么东西,但这只是节点REPL的表示(在Chrome的控制台上是相同的),而数组实际上是空的:

> var cake = [];
> cake["is_a"] = "lie";

> cake
[is_a: "lie"]

> cake.length
0

数组是对象。不,这不是一个节点的事情;它是基本的JavaScript。除了“原始值”,JavaScript中的所有其他内容都是一个对象。。。您可以像在代码中一样将属性添加到您喜欢的任何对象<代码>变量d=新日期;d、 is_a='lie'
的工作原理与
vard=newobject相同;d、 is_a=‘lie’
哇,我是个白痴。。。谢谢@Pointy和Jaromanda X;已经有一段时间了,完全忘记了基础知识。。。你应该删除这个问题,还是把它留给其他人去教育?