在javascript中编写更高效的代码

Gan*_*row 1 javascript refactoring

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

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

谢谢

Jas*_*n L 10

老实说,在大多数情况下,你想使用if链,因为它们对读者来说更清晰.有一些例外,但并不多.

通常,如果您的代码很尴尬,那么您的基本方法就是错误的.试试这个:

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

值得一提的是,字符串在Javascript中是不可变的.如果你+ = on strings,你就会创建很多中间字符串,这会降低性能.

例如

var msg = "Tom";
msg += ", Brad";
msg += ", Sam";
msg += ", Rick";
Run Code Online (Sandbox Code Playgroud)

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

"Tom"
"Brad"
"Sam"
"Rick"
"Tom, Brad"
"Tom, Brad, Sam"
"Tom, Brad, Sam, Rick"
Run Code Online (Sandbox Code Playgroud)

如下:

var msg = ["Tom", "Brad", "Sam", "Rick"];
var msg = msg.join(", ");
Run Code Online (Sandbox Code Playgroud)

在内存中创建以下内容:

"Tom"
"Brad"
"Sam"
"Rick"
"Tom, Brad, Sam, Rick"
Run Code Online (Sandbox Code Playgroud)

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

编辑:

如果调用函数需要检查是否存在错误,则可以始终.length对返回的字符串执行if .如果您想更明确,可以随时执行此操作:

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

然后添加一个检查您的呼叫代码(=== null等)