1

做起来更快吗

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

然后

obj = {}
obj[key] = val;

?

或者这只是因为它更容易在一行上阅读而完成?

4

5 回答 5

7

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

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

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

于 2013-07-28T18:57:28.953 回答
7

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

“称职的程序员充分意识到自己头骨的有限大小。因此,他以完全谦逊的态度对待他的任务,并避免像瘟疫这样的聪明伎俩。” — Edsger W. Dijkstra

于 2013-07-28T18:55:22.037 回答
1

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

于 2013-07-28T18:56:03.770 回答
0

两者做的事情完全相同。单行版本是压缩/压缩器将/应该在内部执行的操作,而不是用户明确执行的操作。在我看来不是很可读。

于 2013-07-28T19:01:49.197 回答
0

简而言之:没有功能差异,也没有评估方式的差异。其评估方式如下:

obj = {}

在内存中创建一个新对象,并将一个引用存储到一个名为 的变量obj

将括号括在该赋值 ( (obj = {})...) 和仅调用第二个示例 ( obj...) 中的实例都直接引用内存中的同一对象。唯一的区别是第二个代码示例写在新行上。

从那里开始,代码完全相同:[key] = val,将存储在key变量中的属性设置为 中设置的值val

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

我能想到第一个示例为何如此的两个原因,是使代码更加紧凑以减小文件大小,或者只是某人的个人喜好。

于 2013-07-28T20:38:20.607 回答