javascript - 数组 "property lists"叫什么,它们与简单对象有何不同?

标签 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.getPrototypeOf(cake)
[]

> Object.getPrototypeOf({})
{}

然后我认为这是数组之上的语法糖,但不是:

> cake[0]
undefined

这让我想起了 Elixir 的关键字列表或 Erlang 的属性列表。他们叫什么? (以便我可以进一步谷歌搜索。)这些是特定于 Node 的吗?

最佳答案

正如 Pointy 和 Jaromanda X 在问题评论中指出的那样,在 JavaScript 中,一切都是对象(包括数组),除了 primitives。 :

The latest ECMAScript standard defines seven data types:

  • Six data types that are primitives:

    • Boolean
    • Null
    • Undefined
    • Number
    • String
    • Symbol (new in ECMAScript 2015)
  • and Object

(另见相关问题 Primitive value vs Reference value)。

我的问题的代码示例是骗人的(至少对我而言),因为它看起来像是存储在数组本身中的东西,但这只是 Node REPL 的表示(在 Chrome 的控制台上与此相同)数组实际上是空的:

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

> cake
[is_a: "lie"]

> cake.length
0

关于javascript - 数组 "property lists"叫什么,它们与简单对象有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51643743/

相关文章:

javascript - Chartjs 2.x - 重绘图表时数据集颜色发生变化

c# - 通过遍历列表访问每个对象的公共(public)方法

arrays - 如何使用prepareForSegue从二维数组传递值

node.js - 使用 Express 服务器设置 ssl

node.js - 如何在命令行中使用不同的参数多次运行 node.js 应用程序

javascript - 比较 2 个对象数组并删除重复的 javascript

javascript - 如何: Onclick buttons and text area scripts

javascript - CakePHP:如何处理ajax表单上的字段错误?

javascript - 在 node.js 中,如何使用 child_process.exec 以便所有操作都可以异步发生?

java - 捕获多个复选框选择 JSP 参数