2013-07-28 50 views
1

它更快做这是一个JavaScript优化?

(obj = {})[key] = val; 

然后

obj = {} 
obj[key] = val; 

或者这是刚刚完成,因为它更容易阅读一行?

+0

它只是更短。 –

+0

它真的很重要吗?或者是让代码更易读,更易维护? –

+8

更容易在一行中阅读?我发现它恰恰相反。 – acdcjunior

回答

7

不,没有真正的区别。这对大多数有经验的编码人员来说可能是显而易见的,但我做了一个jsperf来证明它:http://jsperf.com/tetetetee

你看不到任何可重现的差异。如果存在差异,无论如何,它将会非常小,以至于你无法可靠地测量它。

使用第一种形式的原因只是它的编写时间较短,而对于有经验的JavaScript编码人员而言,读取时间可能会缩短一些。在某些情况下,它可能有助于使代码更加简洁或对称。我个人并不不喜欢第一种形式,但我不会推荐它,因为它会使大多数人难以阅读代码。

+1

该死的,你打败了我。 – Stephen

+0

这就像条件,一个使用三元而其他使用大括号.. –

+0

我怀疑jsperf是可靠的这种微型性能测量。 –

7

我怀疑这两个代码片段在性能上有什么不同。有些人只是喜欢用更紧凑的方式进行编码。我个人认为第一个例子非常神秘,即使作者在六个月后重新阅读代码时可能需要停下来弄清楚发生了什么。

“主管程序员完全意识到自己的头骨有限的大小,因此他完全谦卑地接近他的任务,并避免像鼠疫这样的聪明技巧。” — Edsger W. Dijkstra

1

我不认为2个片段之间有任何区别,第二个片段与第一个片段相比更具可读性。

0

两者完全一样。单行版本是压缩/缩小器应该/应该在内部执行的操作,而用户明确执行该操作。在我看来不太可读。

0

总之:没有功能差异,评估方式也没有差异。它被评估的方式如下:

obj = {} 

新对象在内存中创建和参考被存储到一个称为obj变量。

都在该作业的周围放置括号((obj = {})...),只调用第二个示例中的实例(obj...)直接引用内存中的同一对象。唯一的区别是第二个代码示例写在一个新行上。

从那里的代码是完全一样的:[key] = val,将存储在key变量中的属性设置为在val中设置的值。

这表明代码的计算结果完全相同,这意味着性能不会有任何差异。

我能想到的第一个例子是为什么这样做的两个原因是为了使代码更加紧凑以减小文件大小,或者仅仅是某人的个人偏好。