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

Sus*_*pta 8 javascript json node.js

关于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' }
Run Code Online (Sandbox Code Playgroud)

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

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

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

Den*_*ret 7

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

正如MDN所说:

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

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

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

  • 不用担心。烦人的问题会被否决并经常被关闭。为什么钥匙看起来是有序的或者它们是否应该有序根本不是微不足道的问题;) (2认同)