簡體   English   中英

檢查Typescript / Javascript中的布爾值,分別與“ true”,“ false”和“ undefined”有關

[英]Checking for Boolean Values in Typescript/Javascript Pertaining to “true”, “false”, and “undefined”

我可以確保布爾檢查的唯一結果是“ true”或“ false”的顯式方法是什么? 換句話說,我想盡可能排除“ undefined”。 兩種選擇是:

功能一:

private canMove = (currentOptionSelected): boolean => {
    if (this.client.services) {
        for (const service of this.client.services) {
            if (service === currentOptionSelected) {
                if (service.currentStage === 'enrolling') {
                    return true;
                }
            }
        }
    } 
}

功能二:

private canMove = (currentOptionSelected): boolean => {
    if (this.client.services) {
        for (const service of this.client.services) {
            if (service === currentOptionSelected) {
                return service.currentStage === 'enrolling';
            }
        }
    }
}

編輯:在評論者的回應下,一個更可靠的選擇是顯式返回'false',如下所示:

private canMove = (currentOptionSelected): boolean => {
    if (this.client.services) {
        for (const service of this.client.services) {
            if (service === currentOptionSelected) {
                //You should also rethink this return statement
                return service.currentStage === 'enrolling';
            }
        }
    }
    return false;
}

我將通過詢問是否存在“ client.services”的情況添加一個額外的“ return'false'”來跟進,但是“ currentStage!=='enrolling”會更好嗎? 還是在這種情況下第二個“ else”子句是多余的?

其次,他寫道,我應該根據函數中的返回位置重新考慮return語句。 替代方案是什么? 簡而言之,我正在嘗試找到最健壯但簡潔的方法來編寫此函數。

這些不相等。 在第一個版本返回undefined某些情況下,第二個版本返回false 調用者檢查該值是否明確=== false將觀察到不同的行為。

兩者都可以返回undefined ,這可能不是很大。 最好總是返回truefalse的實際值

簡短的回答是No ,它們不是等效的:

  • 在任何情況下,第一個都不會返回false
  • 如果service.currentStage !== 'enrolling'則第二個可以返回false

但是正如Ryan所述,兩者都可以返回undefined ,您應該避免這種情況,只要不滿足條件,就需要顯式返回false

這應該是您的代碼:

private canMove = (currentOptionSelected): boolean => {
    if (this.client.services) {
        for (const service of this.client.services) {
            if (service === currentOptionSelected) {
                //You should also rethink this return statement
                return service.currentStage === 'enrolling';
            }
        }
    }
    return false;
}

注意:

  • return false; this.client.services undefined時,這里將確保您返回false
  • 以這種方式在for循環中使用return語句是一個非常糟糕的主意,實際上您只會進行一次迭代。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM