Мое заявление if игнорирует мои условия? - PullRequest
0 голосов
/ 11 февраля 2020

Я работаю над приложением калькулятора, и я дал каждой кнопке значение, соответствующее их цифрам или символам.

У меня есть условие if, которое должно проверять, нажимает ли пользователь какую-либо кнопку, кроме " C "или" del "(удалить) кнопка. Если они нажимают кнопку «C» или «del», то ни пользовательский ввод, ни отображение не добавляются.

Проблема, с которой я сталкиваюсь, заключается в том, что даже когда я нажимаю «C "и" del ", оператор if все равно будет выполняться.

let userInput = '';
const display = document.querySelector('.display');
const buttons = document.querySelectorAll('input[type="button"]');


for (let button of buttons) {

    const value = button.value;

    if (value !== "C" || value !== "del"){
        button.addEventListener("click", function(){
            userInput+=value;
            display.innerHTML += value;
            console.log(button.value);
        });
    }
}

Ответы [ 4 ]

2 голосов
/ 11 февраля 2020

Вам необходимо использовать оператор AND , потому что это не должно быть 'C' и 'del'

value != "C" && value != "del"
1 голос
/ 11 февраля 2020

Вам нужен логический оператор И &&, потому что оба условия должны быть истинными.

value !== "C" && value !== "del"
0 голосов
/ 11 февраля 2020

Легко увидеть, что происходит, если мы напишем здесь таблицу логических истин:

+----------+------------------+--------------------+--------+
|  value   | value != "C" (A) | value != "del" (B) | A || B |
+----------+------------------+--------------------+--------+
| "C"      | false            | true               | true   |
| "del"    | true             | false              | true   |
| "banana" | true             | true               | true   |
+----------+------------------+--------------------+--------+

Единственный способ для этого быть false - это если оба условия A и B равны false однако для этого потребуется, чтобы value было одновременно "C" и "del". Что невозможно для строк. Таким образом, поскольку используется логическое ИЛИ, выход всегда будет true независимо от ввода.

Вместо этого логическое И - это то, что вы на самом деле хотите достичь sh:

+----------+------------------+--------------------+--------+
|  value   | value != "C" (A) | value != "del" (B) | A && B |
+----------+------------------+--------------------+--------+
| "C"      | false            | true               | false  |
| "del"    | true             | false              | false  |
| "banana" | true             | true               | true   |
+----------+------------------+--------------------+--------+
0 голосов
/ 11 февраля 2020

Я думаю, что люди уже достаточно ясно дали понять, что, как вы сделали ваше if-утверждение, оно ВСЕГДА получится правдивым, потому что всегда будет либо правда, что это не 'C', ИЛИ это не 'del'.

Однако я подумал, что добавлю другой подход: использование массива и использование функции array.includes

const badValues = ['C', 'del'];
if (badValues.includes(value)) {
   // value is either C or del
} else {
   // value is not C or del
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...