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

时间:2012-12-29 13:16:17

标签: javascript json node.js

JSON

的官方文件中
  

对象是一组无序的名称/值对。一个对象开始   用{(左括号)和以}结尾(右括号)。每个名字都是   后跟:(冒号)和名称/值对分开,   (逗号)。

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

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

但是当我在 Node shell中插入键值对时,它们会以序列化方式插入。这是我在node 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' }

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

  • 我是否可以快速查找密钥?我的意思是O(log(n))或更好的复杂性。
  • 如果JSON没有使用类似BST,hashmap或类似DS的数据结构,那么JSON对象究竟是如何在内存下面放置的呢?

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

1 个答案:

答案 0 :(得分:7)

令人困惑的是JSON,这是唯一基于文本的序列化格式,支持简单的数据交换,以及普通的javascript对象,它们是无序列表属性。

正如the MDN所述:

  

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

对象属性可以看作是哈希映射,因为它们没有被排序。但它通常有点复杂:当对象基于原型时,在对象上找不到的属性会向上搜索它所基于的原型。

使用javascript对象可以保证快速查找,因为这是实现的重要部分。但是实现并不是由规范定义的,每个引擎都可以有自己的实现。