当使用点符号或键时,JavaScript如何查找值

当使用点符号或键时,JavaScript如何查找值,javascript,foreach,Javascript,Foreach,我有一个大型JavaScript对象,其中包含在需要时添加和删除的属性。类似于此: var data = { data1: { subscribers : ["sub1", "sub2"] }, data2: { subscribers : ["sub1", "sub2"] } //[0...*] }; 我希望订阅服务器来自“data2”,因此我使用data[“data2”]。订阅服务器访问此信息 但是我的问题是: 访问这样的属性(点表示法

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

var data = {

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

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

  //[0...*]

};
我希望订阅服务器来自“data2”,因此我使用
data[“data2”]。订阅服务器
访问此信息

但是我的问题是:

  • 访问这样的属性(点表示法,使用属性名)的JavaScript内部工作方式是什么
  • 对象的大小是否会影响订阅服务器数组的返回速度

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

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

不,它不是通过迭代所有属性来工作的,而是基本上通过使用编译前经常使用的类和编译后经常使用的类来工作的(阅读更多)

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


是的,拥有许多财产可能会产生影响,但比你想象的要轻得多。不用担心。

不,它不是通过迭代所有属性来工作的,而是基本上通过使用编译前和编译后常用的类来工作的(请阅读更多)

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


是的,拥有许多财产可能会产生影响,但比你想象的要轻得多。不用担心。

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

javascript对象基本上是一个映射,所以我认为它们将在内部使用哈希表

访问这样的属性(点表示法,使用属性名)的JavaScript内部工作方式是什么

你问题的前提是错误的,JavaScript没有“内部工作”

JavaScript是一种描述发生了什么的语言,它没有说明它在内部是如何工作的,因为JavaScript没有内部构件

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

因此,答案是:这是不相关的

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

访问这样的属性(点表示法,使用属性名)的JavaScript内部工作方式是什么

你问题的前提是错误的,JavaScript没有“内部工作”

JavaScript是一种描述发生了什么的语言,它没有说明它在内部是如何工作的,因为JavaScript没有内部构件

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

因此,答案是:这是不相关的


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

javascript中的所有对象实际上都是哈希表。.依赖于实现,例如Chrome的V8不使用动态查找;javascript中的所有对象实际上都是哈希表..依赖于实现,例如Chrome的V8不使用动态查找;