我在玩 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/