Оператор if со скобками в javascript

Я застрял с довольно простым выражением 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 и является ли это оптимальным способом его кодирования?

Логическое выражение c не просто проверяет, не определено ли оно, оно просто проверяет, истинно ли оно.

Luca Kiebel 13.12.2018 15:37

Правда как в заявленном?

RobbTe 13.12.2018 15:38

Нет, правдивый

Luca Kiebel 13.12.2018 15:38

Нет, truthy, как в, имеет значение, отличное от false, 0, "", null, undefined или NaN (developer.mozilla.org/de/docs/Glossary/Truthy)

Vidar S. Ramdal 13.12.2018 15:39

Я бы сделал шаг назад и проанализирую, что вы собираетесь делать. Здесь будет простота, если нет, вложите ее. Вы пишете код для других людей (включая себя), поэтому пишите для ясности и простоты

Mark Robson 13.12.2018 15:39

Вы не можете использовать var внутри условия. Он зарезервирован для определения переменных.

trincot 13.12.2018 15:43

JavaScript чувствителен к регистру. A - это не та же переменная, что и a.

trincot 13.12.2018 15:44

@MarkRobson Я пытался объяснить, что я пытаюсь сделать, в первом фрагменте кода.

RobbTe 13.12.2018 15:46
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
8
403
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

if ((a === b) && (c && (c !== b)

здесь последняя буква «б» должна быть буквой «д». В противном случае if (c) и if (typeof c === 'undefined') одинаковы

Что делать, если c = false?

Cheloide 13.12.2018 15:43
if (c) и if (typeof c === 'undefined') никогда не совпадают
Luca Kiebel 13.12.2018 15:43

Пардон, имел ввиду var d там

RobbTe 13.12.2018 15:43

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 истинным ИЛИ тип не определен, а затем сопоставьте его. Однако круглые скобки недействительны в вашем коде, правильно?

RobbTe 13.12.2018 15:59

Я просто поправил скобку.

Cheloide 13.12.2018 16:15
Ответ принят как подходящий

Если я правильно понимаю ваш вопрос, значит, вы спрашиваете о логической логике в целом, а не конкретно о JavaScript.

У вас есть это выражение, которое имеет определенные логические подвыражения, которым мы могли бы дать имя следующим образом:

   (A === B) && (C && (C !== D) || typeof C ==='undefined' && (C !== D))
// ----X----    (------Y-------    ----------------Z-------------------)

Итак, логическое выражение имеет такой шаблон:

X && (Y || Z)

Согласно распределительный закон в логической алгебре это эквивалентно:

(X && Y) || (X && Z)

... похоже, именно это вы и спрашивали. Скобки в этом последнем выражении необязательны, поскольку логический оператор И имеет более высокий приоритет, чем логический оператор ИЛИ.

Итак, ваша интерпретация правильно отражает код.

Ваш второй вопрос был:

Is this ... if statement ... an optimal way of coding it?

Поскольку C !== D встречается в двух местах, это выражение эквивалентно следующему выражению, опять же с применением закона распределения:

   A === B && C !== D && (C || typeof C === 'undefined')

Привет, спасибо за миллион. Это очень похоже на то, что предложение @Cheloide правильное? Кроме того, зачем вам значения переменных? Они не статичны. Все, что я знаю, это то, что мне нужна логика, о которой я упомянул в своем вопросе. Еще раз спасибо.

RobbTe 13.12.2018 16:11

В самом деле, я вижу, что Cheloide приходит к тому же упрощенному выражению (с другим порядком, но это эквивалентно законам булевой алгебры). Мне не нужны значения переменных. Я не понял из вашего вопроса, что логика, которую вы упомянули в первой части вопроса, на самом деле была тем, что вы хотел имели в виду. Так что в этом случае все хорошо ;-)

trincot 13.12.2018 16:38

Другие вопросы по теме