在if else块中重复重构if语句

时间:2019-05-12 17:21:45

标签: javascript

如果要在两个块中对同一事物进行测试,我有这个if块:

   if (download !== 'true') {
     if(index == undefined){
       res.json(req.doc);
     }else{
       res.json(index)
     }
   } else {
     if(index == undefined){
       exports.download(res, req.doc);
     }else{
       res.json(index)
     }
   } 

是否有一种方法可以以一种我不会重复同一件事的方式进行重构?

1 个答案:

答案 0 :(得分:6)

由于index == undefined为false时,您在两个分支中都执行相同的操作,因此请先进行测试并将其求反:

if (index != undefined) {
  res.json(index);
} else if (download !== 'true') {
  res.json(req.doc);
} else {
  exports.download(res, req.doc);
}

旁注:

  • == undefined!= undefined将以相同的方式对待undefinednull。如果您不希望自己的病情将null视为undefined,请使用===!==
  • download string 有点奇怪,尽管有时确实会发生这种情况。 如果 download实际上是布尔值,则!== 'true'将始终为true(因为没有布尔值严格等于字符串)。 如果是布尔值,请使用if (download)if (!download)而不是=== true!== true。如果字符串,请注意开头或结尾的空格和大小写(' true' !== 'true'true,因为空格; 'True' !== 'true'为{{1} }(因为大写字母true)。 FWIW。