2011-12-05 28 views
3

我对JavaScript有点新东西。我在客户端使用它一段时间,但现在我冒险进入服务器端Javascript。这个问题是关于Javascript对象,关于它们的创建以及它们属性的有效定义。在JavaScript中,使用属性创建对象的方法最有效?

出于性能原因,我已经看过(几次)创建一个对象为var o = {};现在优于var o = new Object();。在向对象添加属性的方式中,性能有差异吗?

举例来说,有没有这种情况之间的性能有什么区别:这种情况?:

var o = {}; 
o.thing1 = "yardigooven"; 
o.thing2 = "goovenyardi"; 

我假设是首选第一种情况下

var o = { 
    thing1: "yardigooven", 
    thing2: "goovenyardi", 
}; 

和,但我想确保在我写下我所有的对象定义之前。

谢谢。

+2

你真的担心表现吗? – Dykam

+0

解析地图声明可能会有性能损失,但我只是在猜测 –

+0

您是否听说过jsperf.com? – Domenic

回答

11

首先,var o = {};var o = new Array();是不一样的。第一个是初始化一个对象,第二个是数组。 var o = {};var o = new Object();是等同的。

现在谈谈使用对象字面值而不是添加属性之后的性能。哪一个最快?答案是,我们不在乎,也不应该。 如果在性能上存在差异,它将会非常小以至于不会影响,即使您一次创建100万个对象,这种情况也不会发生。

这被称为过早优化,是许多中级程序员的祸根。除非开始出现性能问题,否则不要担心优化任何事情。然后你使用探查器来检测瓶颈并解决它。只需担心你的应用程序。

为了完整起见,here is a test I ran on jsperf。在我的浏览器Chrome 15中,对象字面初始化速度提高了53%。哇,53%,这是很大的权利?除非您将鼠标放在初始化后使用属性的测试工具提示上,否则您会看到它类似于

在0.077秒内运行681,285次。

您的号码可能不同,但您可以观察到,根据任何标准,被认为最慢的方法仍然非常快。我认为可以肯定的是,两者都足够快以达到任何目的。只需使用你喜欢的那个。

+0

对不起,这是一个错误的。我的意思是'新的对象();'。我应该对我的问题做另一个通读。感谢您的输入。我不想让自己关注表现,以至于它会对我的发展过程产生负面影响,但我认为,为常规例程的高效替代品开发习惯是有帮助的。 – Aejay

+0

@Aejay尽管这真的不重要。我只是建议你使用你喜欢的风格或者选择其他的原因而不是速度,比如清晰度。我,对于上述所有,我更喜欢字面记法。作为一个加号,它是最快的一个:) –

3

注意别人关于过早优化的建议 - 意思是不要关注这些实现细节,这些细节在不同的JavaScript解释器实现中可能会有很大差异。

然而,基于this JSPerf benchmark和的样品大小为一(上镀铬/ Mac OS X上),该对象的文本形式(o = {foo:'bar'})是比施工(o={}; o.foo='bar')之后设置属性多更快。

相关问题