Я застрял с довольно простым выражением if, которое я использую в файле javascript. См. Пример ниже.
Мне было интересно, читает ли он / действует следующим образом:
if (var A === var B) &&
(var C truthy && (var C !== var D))
OR
(var A === var B) &&
(typeof var C ==='undefined' && (var C !== var D))
Ниже инструкции, как в моем коде:
if ((A === B) && (C && (C !== D) || typeof C ==='undefined' && (C !== D))) {
alert ('through'); }
Правильно ли это выражение if и является ли это оптимальным способом его кодирования?
Правда как в заявленном?
Нет, правдивый
Нет, truthy, как в, имеет значение, отличное от false, 0, "", null, undefined или NaN (developer.mozilla.org/de/docs/Glossary/Truthy)
Я бы сделал шаг назад и проанализирую, что вы собираетесь делать. Здесь будет простота, если нет, вложите ее. Вы пишете код для других людей (включая себя), поэтому пишите для ясности и простоты
Вы не можете использовать var внутри условия. Он зарезервирован для определения переменных.
JavaScript чувствителен к регистру. A - это не та же переменная, что и a.
@MarkRobson Я пытался объяснить, что я пытаюсь сделать, в первом фрагменте кода.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


if ((a === b) && (c && (c !== b)
здесь последняя буква «б» должна быть буквой «д». В противном случае if (c) и if (typeof c === 'undefined') одинаковы
Что делать, если c = false?
if (c) и if (typeof c === 'undefined') никогда не совпадают
Пардон, имел ввиду var d там
if (var A === var B) && (var c truthy && (var c !== var d))
переводится на
a === b && ( c && c !== d )
а (var A === var B) && (typeof var c ==='undefined' && (var c !== var d)) переводится как
a === b && ( typeof(c) === 'undefined' && c !== d )
Вы можете объединить такие утверждения
if ( a === b && ( c || typeof(c) === 'undefined' ) && c !== d )
alert ('through');
Спасибо, это лучше, я думаю, да. Проверьте, является ли c истинным ИЛИ тип не определен, а затем сопоставьте его. Однако круглые скобки недействительны в вашем коде, правильно?
Я просто поправил скобку.
Если я правильно понимаю ваш вопрос, значит, вы спрашиваете о логической логике в целом, а не конкретно о JavaScript.
У вас есть это выражение, которое имеет определенные логические подвыражения, которым мы могли бы дать имя следующим образом:
(A === B) && (C && (C !== D) || typeof C ==='undefined' && (C !== D))
// ----X---- (------Y------- ----------------Z-------------------)
Итак, логическое выражение имеет такой шаблон:
X && (Y || Z)
Согласно распределительный закон в логической алгебре это эквивалентно:
(X && Y) || (X && Z)
... похоже, именно это вы и спрашивали. Скобки в этом последнем выражении необязательны, поскольку логический оператор И имеет более высокий приоритет, чем логический оператор ИЛИ.
Итак, ваша интерпретация правильно отражает код.
Ваш второй вопрос был:
Is this ...
ifstatement ... an optimal way of coding it?
Поскольку C !== D встречается в двух местах, это выражение эквивалентно следующему выражению, опять же с применением закона распределения:
A === B && C !== D && (C || typeof C === 'undefined')
Привет, спасибо за миллион. Это очень похоже на то, что предложение @Cheloide правильное? Кроме того, зачем вам значения переменных? Они не статичны. Все, что я знаю, это то, что мне нужна логика, о которой я упомянул в своем вопросе. Еще раз спасибо.
В самом деле, я вижу, что Cheloide приходит к тому же упрощенному выражению (с другим порядком, но это эквивалентно законам булевой алгебры). Мне не нужны значения переменных. Я не понял из вашего вопроса, что логика, которую вы упомянули в первой части вопроса, на самом деле была тем, что вы хотел имели в виду. Так что в этом случае все хорошо ;-)
Логическое выражение
cне просто проверяет, не определено ли оно, оно просто проверяет, истинно ли оно.