用javascript编写更高效的代码
我正在努力编写更可读、更高效的代码,我一直不喜欢if-chains。。是否可以用其他更“优雅”的方式编写以下语句,比如使用三值运算:用javascript编写更高效的代码,javascript,refactoring,Javascript,Refactoring,我正在努力编写更可读、更高效的代码,我一直不喜欢if-chains。。是否可以用其他更“优雅”的方式编写以下语句,比如使用三值运算: if(text.length < 1){ if(errtext.length > 1){ errtext+="<br>"; } errors = true; errtext += "Field cannot be empty"; } if(text.length1){ errtext+=“”
if(text.length < 1){
if(errtext.length > 1){
errtext+="<br>";
}
errors = true;
errtext += "Field cannot be empty";
}
if(text.length<1){
如果(errtext.length>1){
errtext+=“
”;
}
错误=正确;
errtext+=“字段不能为空”;
}
谢谢像这样的东西怎么样:
errors = (text.length < 1);
if (errors) {
errtext += (errtext.length > 1 ? "<br>" : "") + "Field cannot be empty";
}
errors=(text.length<1);
如果(错误){
errtext+=(errtext.length>1?
:“”)+“字段不能为空”;
}
像这样的东西怎么样:
errors = (text.length < 1);
if (errors) {
errtext += (errtext.length > 1 ? "<br>" : "") + "Field cannot be empty";
}
errors=(text.length<1);
如果(错误){
errtext+=(errtext.length>1?
:“”)+“字段不能为空”;
}
您可以做的一件事是利用大于0的数字的真实性和等于0的数字的虚假性:
if(!text.length) {
if (errtext.length) {
errtext += "<br />";
}
errors = true;
errtext += "Field cannot be empty";
}
if(!text.length){
if(errtext.length){
errtext+=“
”;
}
错误=正确;
errtext+=“字段不能为空”;
}
您可以做的一件事是利用大于0的数字的真实性和等于0的数字的虚假性:
if(!text.length) {
if (errtext.length) {
errtext += "<br />";
}
errors = true;
errtext += "Field cannot be empty";
}
if(!text.length){
if(errtext.length){
errtext+=“
”;
}
错误=正确;
errtext+=“字段不能为空”;
}
您引用的代码似乎很清楚。您可以加入一个三元(我假设检查应该是>0
,而不是>1
):
if(text.length<1){
错误=正确;
errtext+=(errtext.length>0?
“:”)+“字段不能为空”;
}
但这不仅不太清楚,而且使用非优化编译器也会降低效率。(这与您在这里介绍的上下文无关,我猜这不是一个紧密的循环。)
比三元测试更好的选项(同样,如果有很多这样的测试):
- 始终在所有错误文本中包含
,然后在演示之前删除第一个错误文本。如果您有很多地方,那么添加错误文本就简单多了 - 在数组中建立错误消息,然后在显示它们时使用
作为分隔符
- 您引用的代码似乎非常清楚。您可以加入一个三元(我假设检查应该是
>0
,而不是>1
):
if(text.length<1){
错误=正确;
errtext+=(errtext.length>0?
“:”)+“字段不能为空”;
}
但这不仅不太清楚,而且使用非优化编译器也会降低效率。(这与您在这里介绍的上下文无关,我猜这不是一个紧密的循环。)
比三元测试更好的选项(同样,如果有很多这样的测试):
- 始终在所有错误文本中包含
,然后在演示之前删除第一个错误文本。如果您有很多地方,那么添加错误文本就简单多了 - 在数组中建立错误消息,然后在显示它们时使用
作为分隔符
function validate()
{
errs = [];
// ...
if (!txt.length) {
errs.push("Must have text, man!");
}
// ...
return errs.join("<BR>");
}
这将在内存中创建以下字符串:
"Tom"
"Brad"
"Sam"
"Rick"
"Tom, Brad"
"Tom, Brad, Sam"
"Tom, Brad, Sam, Rick"
"Tom"
"Brad"
"Sam"
"Rick"
"Tom, Brad, Sam, Rick"
其中如下所示:
var msg = ["Tom", "Brad", "Sam", "Rick"];
var msg = msg.join(", ");
在内存中创建以下内容:
"Tom"
"Brad"
"Sam"
"Rick"
"Tom, Brad"
"Tom, Brad, Sam"
"Tom, Brad, Sam, Rick"
"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>");
if(!errs.length){
返回null;//或false,或常量。。。
}
返回errs.join(“
”);
然后在调用代码中添加一个检查(
==null
,等等)。老实说,在大多数情况下,您希望使用if链,因为它们对读者来说更清晰。有一些例外,但不多
通常,如果您的代码很笨拙,那么您的基本方法就是错误的。试试这个:
function validate()
{
errs = [];
// ...
if (!txt.length) {
errs.push("Must have text, man!");
}
// ...
return errs.join("<BR>");
}
这将在内存中创建以下字符串:
"Tom"
"Brad"
"Sam"
"Rick"
"Tom, Brad"
"Tom, Brad, Sam"
"Tom, Brad, Sam, Rick"
"Tom"
"Brad"
"Sam"
"Rick"
"Tom, Brad, Sam, Rick"
其中如下所示:
var msg = ["Tom", "Brad", "Sam", "Rick"];
var msg = msg.join(", ");
在内存中创建以下内容:
"Tom"
"Brad"
"Sam"
"Rick"
"Tom, Brad"
"Tom, Brad, Sam"
"Tom, Brad, Sam, Rick"
"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>");
if(!errs.length){
返回null;//或false,或常量。。。
}
返回errs.join(“
”);
然后在调用代码中添加一个检查(
==null
,等等)用add方法创建一个错误
类和某种错误
集合怎么样
您的错误集合将知道如何添加br标记,并且您的调用代码将是所有验证逻辑,而不是验证,消息文本和标记都混合在一起
您可以检查错误集合是否有任何条目,而不是有标志
您甚至可以在应用程序的其他位置重用错误 用add方法创建一类
Error
和某种Errors
集合怎么样
您的错误集合将知道如何添加br标记,并且您的调用代码将是所有验证逻辑,而不是验证,消息文本和标记都混合在一起