如果要在两个块中对同一事物进行测试,我有这个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)
}
}
是否有一种方法可以以一种我不会重复同一件事的方式进行重构?
答案 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
将以相同的方式对待undefined
和null
。如果您不希望自己的病情将null
视为undefined
,请使用===
和!==
。download
是 string 有点奇怪,尽管有时确实会发生这种情况。 如果 download
实际上是布尔值,则!== 'true'
将始终为true(因为没有布尔值严格等于字符串)。 如果是布尔值,请使用if (download)
或if (!download)
而不是=== true
或!== true
。如果是字符串,请注意开头或结尾的空格和大小写(' true' !== 'true'
为true
,因为空格; 'True' !== 'true'
为{{1} }(因为大写字母true
)。 FWIW。