Javascript 访问大型对象的对象属性的成本有多高?

Javascript 访问大型对象的对象属性的成本有多高?,javascript,javascript-objects,Javascript,Javascript Objects,背景:我是一个自学成才的程序员。在过去的六年里,我一直在从事专业的JS工作,但由于我对计算机科学基础知识缺乏了解,有些事情我并不清楚 考虑到目标: const test = {a: 1, b: 2, c: 3} 您可以通过两种方式找到属性b的值。路径1: console.log(test.b) 或者,路径2: for( const prop of Object.keys(test) ){ if( prop === 'b' ) return console.log(test[p

背景:我是一个自学成才的程序员。在过去的六年里,我一直在从事专业的JS工作,但由于我对计算机科学基础知识缺乏了解,有些事情我并不清楚

考虑到目标:

const test = {a: 1, b: 2, c: 3}  
您可以通过两种方式找到属性
b
的值。路径1:

console.log(test.b)  
或者,路径2:

for( const prop of Object.keys(test) ){
    if( prop === 'b' ) return console.log(test[prop])
}  

我的问题:在引擎盖下,路径1与路径2基本相同吗?计算机是否还必须检查
测试的每个属性才能找到
b
?或者,当它得到
test[b]
时,它是否以某种方式“神奇地”知道在内存中查找的确切位置,从而不必扫描整个对象?

Path1与path2不同。我认为这取决于使用了什么JS引擎,但对于chrome,您可以在这里找到有关如何完成path1的详细信息:。我认为,如果您想了解基本层次的内容,您可以查看(虽然V8显然没有使用这些内容,但它会让您了解如何快速/持续地进行查找),实现取决于所使用的JS引擎,但我认为可以很安全地说,他们将主要使用哈希表,因此访问元素的复杂性为O(1)(意味着不必遍历所有属性),因此Path1将更快,因为它是直接访问,而不是魔法:)此外,哈希表的工作原理如下,实现具有缓存机制,因此在多次访问同一属性时不必重复哈希函数。对象是一个关键的数据结构,实现会尽可能地优化它们。我认为有助于解决性能问题的一个方法是尝试比较性能本身。使用分析工具,比较使用直接属性访问和第二种方法的运行时间。添加您的结果和假设。然后我们就有了一个跳转的地方,因为我们可以缩小性能测试的范围,或者帮助纠正或确认假设。这很好,但也有客户端工具。