为什么访问对象属性总是比访问数组元素更快?

8

我已经对两种方法进行了基准测试:

访问数组项

var object = [10, 15, 20];
var x = object[0];
var y = object[1];
var z = object[2];

并且 访问对象属性

var object = {
  x: 10,
  y: 15,
  z: 20
};
var x = object.x;
var y = object.y;
var z = object.z;

我本以为访问数组元素速度会更快,因为没有涉及属性名解析。但是出乎我的意料,通过所有浏览器访问对象属性大概比访问数组元素快30%。这个基准测试结果让我感到困惑。为什么前一种方法比后一种方法慢那么多呢?图表[基准测试链接]

“因为没有涉及属性名称解析。”是什么让你认为没有属性名称解析?数组只是高级对象。数组索引就是属性名称。 - user1106925
1
@amnotiam C语言背景下的常识。 - caiosm1005
是的,使用JavaScript有时需要将常识放在一边。 - user1106925
1个回答

12

我明白了!所以开销一定来自于数组对象的创建。也就是说,创建一个 [Array] 比创建一个普通的 [Object] 要花费更长的时间,对吗? - caiosm1005
1
@caiosm1005:创建对象和数组是有区别的,这并不奇怪,因为数组是一个对象,只是具有处理带有数字索引项的特殊代码。 - Guffa
因此,我们可以放心地说,它们处理所需的时间几乎相同。 - GorvGoyl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接