我有一个可以验证几种不同条件的函数。这是我的功能示例:
function checkData() {
var errorMsg = "",
fld1 = 0, //Number(document.getElementById('fld1').value),
fld2 = 5, //Number(document.getElementById('fld2').value),
fld3 = 1, //Number(document.getElementById('fld3').value),
fld4 = 0; //Number(document.getElementById('fld4').value);
if (!fld1) {
errorMsg += "Error 1\n\n";
}
if (fld1 === fld4) {
errorMsg += "Error 2\n\n";
}
if (fld2 > fld4) {
errorMsg += "Error 3\n\n";
}
if (fld3 > 3) {
errorMsg += "Error 4\n\n";
}
if (errorMsg !== "") {
var check = confirm(errorMsg + "\n Do you want to submit the form?");
if (check) {
return true;
} else {
return false;
}
}
return true;
}
<button onclick="checkData();">Click Here</button>
在上面的示例中,我为测试目的硬编码了一些值。但是,我想知道是否可以重构此代码并找到实现相同结果的更好方法?三元运算符更适合吗?还是有另一种方法可以使它起作用?谢谢。
答案 0 :(得分:3)
在这种用例中,我认为“多重假设”解决方案非常清楚,因此可以使用。
如果您想优化一点,我只能建议
if(check){
return true;
}else{
return false;
}
成为
return !!check;
(这两个感叹号只是将任何对象投射到布尔值中:-))
答案 1 :(得分:1)
整个check
变量毫无意义。因此,return confirm
就是您所需要的
function checkData() {
var errorMsg = "",
fld1 = 0, //Number(document.getElementById('fld1').value),
fld2 = 5,//Number(document.getElementById('fld2').value),
fld3 = 1,//Number(document.getElementById('fld3').value),
fld4 = 0;//Number(document.getElementById('fld4').value);
if(!fld1){
errorMsg += "Error 1\n\n";
}
if(fld1 === fld4){
errorMsg += "Error 2\n\n";
}
if(fld2 > fld4){
errorMsg += "Error 3\n\n";
}
if(fld3 > 3){
errorMsg += "Error 4\n\n";
}
return errorMsg !== "" ? confirm(errorMsg + "\n Do you want to submit the form?") : true
}
<button onclick="checkData();">Click Here</button>
答案 2 :(得分:0)
您可以使用三元运算符重构if语句。但是有可能会使您的代码难以阅读。您可以替换
if(check){
return true;
}else{
return false;
}
仅使用return check;
,因为这仍然是布尔语句。
就可读性而言,最好将字段变量标记为更有意义的名称,因为从名称中并不立即知道fld2
应该总是大于fld4
。
如果您不希望突出显示特定的错误代码,那么您当然可以合并一些检查,并只返回false
而未指定错误代码,但是我怀疑您会希望保留该错误代码功能。