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

cai*_*005 7 javascript performance

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

访问数组项

var object = [10, 15, 20];
var x = object[0];
var y = object[1];
var z = object[2];
Run Code Online (Sandbox Code Playgroud)

Access对象属性

var object = {
  x: 10,
  y: 15,
  z: 20
};
var x = object.x;
var y = object.y;
var z = object.z;
Run Code Online (Sandbox Code Playgroud)

我期望对数组项的访问速度更快,因为不涉及属性名称解析.

但令我惊讶的是,在所有浏览器中访问对象属性的速度大约快30%.

图表 [基准的URL]

那个基准测试结果让我很困惑.出于什么原因,前一种方法应该比后一种方法慢得多?

Guf*_*ffa 12

您已在测试中包含对象和数组的创建.如果你把它放在初始化代码中,差异会变得非常小:

http://jsperf.com/object-properties-and-array-items/2