Přiřadit proměnnou v příkazu if condition, dobrý postup nebo ne? [ZAVŘENO]

Zavřeno . Tato otázka je založena na názoru. Momentálně nepřijímá odpovědi.

Chcete zlepšit tuto otázku? Aktualizujte otázku, aby na ni bylo možné odpovědět pomocí faktů a citací úpravou tohoto příspěvku.

Zavřeno před 2 lety.

Vylepšete tuto otázku

Před rokem jsem přešel z klasických OO jazyků, jako je Java, na JavaScript. Následující kód se v Javě rozhodně nedoporučuje (nebo dokonce není správný):

if(dayNumber = getClickedDayNumber(dayInfo))
{
    alert("day number found : " + dayNumber);
}
function getClickedDayNumber(dayInfo)
{
    dayNumber = dayInfo.indexOf("fc-day");
    if(dayNumber != -1) //substring found
    {
        //normally any calendar month consists of "40" days, so this will definitely pick up its day number.
        return parseInt(dayInfo.substring(dayNumber+6, dayNumber+8));
    }
    return false;
}

V podstatě jsem právě zjistil, že mohu přiřadit proměnnou k hodnotě v příkazu if condition a okamžitě zkontrolovat přiřazenou hodnotu, jako by byla booleovská.

Pro bezpečnější sázku to obvykle rozděluji do dvou řádků kódu, nejprve přiřadím a poté zkontroluji proměnnou, ale teď, když jsem to našel, jsem jen zvědavý, zda je to dobrá praxe v očích zkušených vývojářů JavaScriptu?

Odpověď

nedoporučoval bych to. Problém je v tom, že to vypadá jako běžná chyba, kdy se pokoušíte porovnat hodnoty, ale použijete jeden = místo == nebo === . Když například uvidíte toto:

if (value = someFunction()) {
    ...
}

nevíte, jestli to chtěli udělat, nebo jestli chtěli napsat tohle:

if (value == someFunction()) {
    ...
}

Pokud opravdu chcete provést úkol na místě, doporučil bych provést také explicitní srovnání:

if ((value = someFunction()) === <whatever truthy value you are expecting>) {
    ...
}