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等)