Javascript 什么是数组;物业清单;调用,它们与简单对象有何不同?
我在Node中玩的时候,不小心打错了花括号(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
{}
),而是放了方括号([]
),并开始将变量用作简单对象。没有抛出错误,行为似乎是相同的,但当我用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;已经有一段时间了,完全忘记了基础知识。。。你应该删除这个问题,还是把它留给其他人去教育?