Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 重构if-else块中重复的if语句_Javascript - Fatal编程技术网

Javascript 重构if-else块中重复的if语句

Javascript 重构if-else块中重复的if语句,javascript,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{

我有一个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)
     }
   } 

有没有一种方法可以重构它,这样我就不会重复同样的事情了?

因为当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和null。如果不希望条件将null视为未定义,请使用===和!==。 下载是一个字符串,这有点奇怪,尽管有时确实会发生这种情况。如果下载实际上是一个布尔值,那么!='“true”将始终为true,因为没有布尔值严格等于字符串。如果是布尔值,请使用If下载或If!下载而不是===true或!==符合事实的如果是字符串,请注意开头或结尾处的空格和大写字母“true”!='“真”是真的,因为有空格;'真“!=”“真”是真的,因为大写字母T.FWIW。
因为当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和null。如果不希望条件将null视为未定义,请使用===和!==。 下载是一个字符串,这有点奇怪,尽管有时确实会发生这种情况。如果下载实际上是一个布尔值,那么!='“true”将始终为true,因为没有布尔值严格等于字符串。如果是布尔值,请使用If下载或If!下载而不是===true或!==符合事实的如果是字符串,请注意开头或结尾处的空格和大写字母“true”!='“真”是真的,因为有空格;'真“!=”“真”是真的,因为大写字母T.FWIW。
检查字符串。对吗?为什么下载的值是字符串?为什么在索引中使用==而不是===呢?它实际上是一个字符串,我刚刚将它命名为给定对象的索引,这就是你对照字符串检查的对象的名称。对吗?为什么下载的值是字符串?你为什么在索引上使用==而不是===呢?它实际上是一个字符串,我刚刚把它命名为给定对象的索引,这就是它的名字它对我有用,谢谢你的详细解释它对我有用,谢谢你的详细解释