javascript - 在 javascript 中编写更高效的代码

标签 javascript refactoring

我正在尝试编写更具可读性和更高效的代码,我一直讨厌 if if if 链 .. 是否有可能以其他更“优雅”的方式编写以下语句,例如使用三元操作:

if(text.length < 1){
    if(errtext.length > 1){
        errtext+="<br>";
    }
    errors = true;
    errtext += "Field cannot be empty";
}

谢谢

最佳答案

老实说,在大多数情况下,您希望使用 if 链,因为它们对读者来说更清晰。有一些异常(exception),但不多。

如果您的代码很笨拙,通常是因为您的基本方法是错误的。试试这个:

function validate()
{
  errs = [];
  // ...
  if (!txt.length) {
    errs.push("Must have text, man!");
  }
  // ...
  return errs.join("<BR>");
}

值得一提的是,字符串在 Javascript 中是不可变的。如果您对字符串 +=,则会创建大量中间字符串,这会降低性能。

例如

var msg = "Tom";
msg += ", Brad";
msg += ", Sam";
msg += ", Rick";

这最终会在内存中创建以下字符串:

"Tom"
"Brad"
"Sam"
"Rick"
"Tom, Brad"
"Tom, Brad, Sam"
"Tom, Brad, Sam, Rick"

如下所示:

var msg = ["Tom", "Brad", "Sam", "Rick"];
var msg = msg.join(", ");

在内存中创建以下内容:

"Tom"
"Brad"
"Sam"
"Rick"
"Tom, Brad, Sam, Rick"

在这种情况下,很可能不会产生很大的不同,但最好养成创建字符串数组和使用 join 方法的习惯。在较大的文本操作/生成问题中,它可能会导致速度大幅下降。

编辑:

如果调用函数需要检查是否存在错误,您始终可以对返回字符串的 .length 执行 if。如果你想更明确,你总是可以这样做:

if (!errs.length) {
  return null; // or false, or a constant...
}
return errs.join("<BR>");

然后在您的调用代码中添加一个检查(=== null 等)

关于javascript - 在 javascript 中编写更高效的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1922581/

相关文章:

javascript - 函数 add() 带提示的数字

javascript - Extjs 3.4 -> 窗口不显示

javascript - 为 AmCharts 4 标签添加样式

javascript - 与 prevState 比较的 componentDidUpdate 正在替代触发器上工作

javascript - 如何使用nodejs获取uber api访问 token

delphi - 如何在 Delphi 中获得 Visual Studio 的 "Create method stub"或 "Declare method"重构?

java - 重构 if/else 逻辑

javascript - while 循环中此赋值的逻辑(jshint 友好)等效项

javascript - 我怎样才能提取这个JavaScript函数

python - 函数定义后的 Import 语句——如何让它更像 pythonic?