JavaScript中的对象如何存储在内存中?

在JSON的官方文档

一个对象是一组无名的名称/值对。 一个对象以{(左大括号)开始并以}(右大括号)结束。 每个名称后跟:(冒号),名称/值对由(逗号)分隔。

注意我是Javascript新手,并从名称JSON(Javascript对象表示法)本身,我假设在Javascript中的对象是相同的JSON。 如果我弄错了,请纠正我的错误。

从上面的定义看来,Javascript对象最有可能是由hashmap或BST或一些类似的数据结构来实现的。

但是,当我在Node shell中插入键值对时,它们以串行方式插入。 这是我在节点shell中尝试的

> var a = {} undefined > a['k1'] = 'a1' 'a1' > a['k3'] = 'a3' 'a3' > a['k2'] = 'a2' 'a2' > a['k4'] = 'a4' 'a4' > a['k5'] = 'a5' 'a5' > a { k1: 'a1', k3: 'a3', k2: 'a2', k4: 'a4', k5: 'a5' } 

现在,在打印时,按照与插入相同的顺序返回键值对。 所以我的问题是:

  • 我能快速查找关键吗? 我的意思是O(log(n))或更好的复杂性。
  • 如果JSON不使用像BST,HashMap或类似的DS这样的数据结构,那么JSON对象究竟是如何置于内存之下的呢?

更新 Ok,那么Javascript对象呢? 有人可以评论的Javascript对象的底层实现。

您将JSON混淆了,它只是一种基于文本的序列化格式,可以实现简单的数据交换,以及普通的javascript对象,它们是无序的属性列表。

正如MDN所说:

一个对象是属性的集合,属性是名称和值之间的关联。 属性的值可以是一个函数,然后被称为对象的方法。

对象属性可以看作散列图,因为它们没有sorting。 但是它往往更复杂一点:当对象是基于原型的时候,在对象上找不到的属性会向上search它所基于的原型。

有了JavaScript对象,你可以快速查找,因为这是实现的一个重要部分。 但是实现不是由规范定义的,每个引擎都可以有自己的。