Трюки с булевыми значениями if

Чтобы добавить к существующим ответам о множественном наследовании Java8 с интерфейсами (так же, как Java все еще избегает проблемы с алмазом):

Существует три правила:

  1. A класс всегда побеждает.
  2. Если класс не имеет: самый конкретный интерфейс выигрывает

  1. Если выше не так, наследующий класс должен явно указать, какую реализацию метода он использует (иначе он не будет компилироваться)

-1
задан Ayan 29 March 2019 в 05:46
поделиться

3 ответа

Значения, которые вы получаете в isMobileDevice, не являются логическими значениями (true, false), а являются строками ('true', 'false').
При оценке в булевом контексте оба значения эквивалентны true (булево).

Вы должны сравнить isMobileDevice со строкой:

if (isMobileDevice === 'true') {
    // do something
} else {
    // do something else
}

При использовании в логическом контексте (то есть как условия) false, 0, "", null, [1112 ] и NaN считаются false, все остальные значения считаются true.
Подробнее о значении truey в JavaScript: https://developer.mozilla.org/en-US/docs/Glossary/Truthy

0
ответ дан axiac 29 March 2019 в 05:46
поделиться

Проверьте, что значения также являются строками, а не просто логическими, поскольку false не совпадает с 'false'. То же самое с true и 'true'.


    let isMobileDevice = req.headers["is-mobile-device"];
    console.log(isMobileDevice);

    if(isMobileDevice==true || isMobileDevice=='true') {
        console.log("Mobile client");
        return res.sendStatus(200);
    }
    else {
        console.log("Web Client");
        return res.sendStatus(200);
    }

0
ответ дан Rai 29 March 2019 в 05:46
поделиться

Вы также можете изменить if condition, как показано ниже

if (Boolean(isMobileDevice)) {
    // do something
} else {
    // do something else
}
0
ответ дан Sagar M 29 March 2019 в 05:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: