0

我有一个大型 JavaScript 对象,其中包含在需要时添加和删除的属性。与此类似的东西:

var data = {

  data1: {
      subscribers : ["sub1", "sub2"]
  },

  data2: {
      subscribers : ["sub1", "sub2"]
  }

  //[0...*]

};

我想要来自“data2”的订阅者,所以我data["data2"].subscribers用来访问这些信息。

但我的问题是:

  • 访问此类属性的 JavaScript 内部工作原理是什么(点表示法,使用属性名称)?
  • 对象的大小是否会影响订阅者数组的返回速度?

我的猜测是大小会影响接收返回数据的速度,因为我认为 JavaScript 访问属性的方式是在对象上使用 for 循环:

function getSubs(name) {
    for(var prop in data) {
        if(prop === name) {
            return data[prop].subscribers;
        }
    }
}
var subs = getSubs("data2");
4

3 回答 3

6

不,它不能通过迭代所有属性来工作,但基本上是通过在编译之前使用常用的哈希表模式和在编译之后使用类(在此处阅读有关 V8 的更多信息)。

事实上,这是 javascript 引擎内部工作的一部分,而不是规范。你需要知道的是:

是的,拥有许多属性可能会产生影响,但比您想象的要轻得多。别担心。

于 2013-01-17T13:51:39.920 回答
0

javascript 对象基本上是一个地图,所以我认为他们将在内部使用哈希表。

于 2013-01-17T13:57:21.150 回答
-1

访问此类属性的 JavaScript 内部工作原理是什么(点表示法,使用属性名称)?

您的问题的前提是错误的,JavaScript 没有“内部工作原理”!

JavaScript 是一种语言,它描述发生的事情,它没有说明它在内部是如何工作的,因为 JavaScript 没有内部结构。

JavaScript 的每个实现都有自己的做事方式。由于它们满足规范所描述的语义(即what),因此您不必担心。

因此,答案是:无关紧要

只有当您遇到性能问题,并且只有当您确定使用较少的属性时问题会消失时,您才会考虑考虑实现。但即便如此,您只需要知道问题已经消失。

于 2013-01-17T14:10:00.620 回答