我应该声明一个变量还是访问对象方法?

时间:2019-01-08 13:15:01

标签: angular typescript

哪种做法更好?为什么?

声明一个变量:

exampleFunction(requestData: Object) {
  const username = requestData.username;

  doSomething(username);
}

还是直接访问对象属性?

exampleFunction(requestData: Object) {
  doSomething(requestData.username);
}

如果我使用的代码超过50行并且该变量被多次使用该怎么办。我应该多次使用变量“用户名”还是多次使用“ requestData.username”?

5 个答案:

答案 0 :(得分:5)

V8 Javascript Engine对代码进行一些优化预处理,并检查是否可以删除某些变量或代码中是否存在某些常规模式,以减少执行负载。

因此,使用表单或其他表单(至少使用V8引擎(例如Chrome或NodeJS))不会出现内存问题。

即使不执行此优化,它也只是一个指针或原始变量,因此花费的字节数不会超过

我们谈论传输代码的成本是不同的。我们知道JavaScript不是一种编译语言,它需要到达客户的计算机才能执行,因此每个空间,缩进,分号都将按照传输时间的顺序进行计算。

为降低成本,您可以丑化和缩小代码,但通常不会执行这种优化。

最后,不可能想到可以发挥作用的场景,因此我建议您使用您认为更容易阅读的表格,而与其他参数无关。

答案 1 :(得分:5)

通过重构Martin Fowler是一项技术(Replace Temp with Query)。

之后,您将转到第二个变体

cloneFullProject(requestData: Object) {
  doSomething(requestData.username);
}

但是它也有气味(Middle Man)。

作为此示例的结论,最好完全删除此方法:)

但是,在某些情况下,首选首选示例。例如:  您有几种采用requestData.username参数的方法。

exampleFunction(requestData: Object) {
  const username = requestData.username;

  doSomething1(username);
  doSomething2(username);
  ...
}

在这种情况下,临时变量是合理的

答案 2 :(得分:3)

首选专家:

  1. 可读代码
  2. 您可以在传递给其他方法之前调试和验证值

第一选择的缺点:

  1. 它将创建不必要的变量并消耗更多内存

答案 3 :(得分:2)

首先,您是referencing对象,而不是克隆对象。 正确的克隆方法是通过Object.assign()或lodash(或类似的)_.cloneDeep()或散布运算符或其他任何东西。

有关克隆的更多信息,请参考typescript - cloning object

提到这个问题,当您只有一个变量来工作时,在如此短的方法中,两个变量的可读性相同。

因为该方法太短,所以我宁愿使用后者,因为读取一行代码可以说明我将对象的什么属性传递给方法,而不是反向读取代码。

就我个人的喜好和一般性观点而言,解构是另一位程序员希望从您的代码中获得的最干净的方式:

const { username, var1, var2 }  = requestData;

答案 4 :(得分:1)

  

从根本上讲,这是一个基于意见的问题。因此,以下给出的答案是我的观点。

  • 在第一种情况下,您不需要实际上不需要的额外变量,因为您不会在同一块中进一步处理它。因此,我建议您在方案中使用直接属性访问第二个,并且可读性强
  • 如果您的实际代码长度超过60行(或大约60行),并且变量在不同的位置多次使用,则可以将第一种情况额外的变量,这样您就可以通过较少/安全的输入轻松地处理它