Javascript 为什么初始化对象';s属性为null时是否增加速度?

Javascript 为什么初始化对象';s属性为null时是否增加速度?,javascript,performance,performance-testing,Javascript,Performance,Performance Testing,出于某种原因,如果您创建一个对象并使用空值初始化每个属性,然后为每个属性分配一个值,那么(至少在Chrome中)似乎比简单地将对象保留为空要快。为什么是这种情况 V8(Chrome的Javascript引擎)进行了优化,定义了隐藏类来表示Javascript中的特定对象。在创建时声明对象的属性时,可以更好地执行此操作 使用隐藏类有两个优点:属性访问没有 不需要字典查找,并且它们允许V8使用经典 基于类的优化,内联缓存 您的测试用例在我看来有点混乱。首先,测试功能是不必要的(我想是吧?),其次,您

出于某种原因,如果您创建一个对象并使用空值初始化每个属性,然后为每个属性分配一个值,那么(至少在Chrome中)似乎比简单地将对象保留为空要快。为什么是这种情况

V8(Chrome的Javascript引擎)进行了优化,定义了隐藏类来表示Javascript中的特定对象。在创建时声明对象的属性时,可以更好地执行此操作

使用隐藏类有两个优点:属性访问没有 不需要字典查找,并且它们允许V8使用经典 基于类的优化,内联缓存


您的测试用例在我看来有点混乱。首先,
测试
功能是不必要的(我想是吧?),其次,您正在为对象文本中定义的属性以外的其他属性赋值(除了第一次测试)。在我的测试中,“空白”结果最快。下面是一个更新版本:。空的和任何其他情况之间的区别可能(!)来自这样一个事实,即属性必须在运行时而不是“编译时”创建。所有其他案例似乎都同样快(至少它们在误差范围内)。@FelixKling是的——那是我的错。我想尝试让浏览器不会检测到它们是同一个对象或其他东西,但不知道当时我在想什么。无论如何,为了得到更准确的结果,我做了一个新的修订,但是使用了不同的对象名称。