Проблема логического оператора Javascript [дубликат]

, в котором элемент в настоящее время является классом «.bar»? Вот еще одно решение, но все зависит от вас.

var reg = /Image/g, // regexp for an image element
query = document.querySelector('.bar'); // returns [object HTMLImageElement]
query += this.toString(); // turns object into a string

if (query.match(reg)) { // checks if it matches
  alert('the class .bar is attached to the following Element:\n' + query);
}

jsfiddle demo

Конечно, это всего лишь поиск одного простого элемента (/Image/g), но вы можете поместить все в массив, например

  • , /LI/g,
      = /UL/g и т. д.

  • 35
    задан JTApps 22 June 2012 в 15:16
    поделиться

    6 ответов

    Мое эмпирическое правило, охватывающее в основном 99% всех вариантов использования условных операторов, является:

    1. Группировка: ()
    2. Доступ пользователя . or [...]
    3. Не: !
    4. Сравнение, например < , >= , === , !=, ...
    5. Логический И &&
    6. Логический ИЛИ ||

    MDN дает исчерпывающий пробой: Javascript Operator Приоритет

    , поэтому для вашего примера:

    (firstRun == true || selectedCategory != undefined && selectedState != undefined)
    

    равно

    (firstRun == true) || ((selectedCategory != undefined) && (selectedState != undefined))
    

    Для чего-либо более сложного, чем вышеупомянутые случаи, я бы посмотрел в рефакторинг кода для удобочитаемости в любом случае!

    53
    ответ дан Christoph 27 August 2018 в 12:20
    поделиться

    См. эту диаграмму для приоритета .

    Я не собираюсь объяснять, что происходит, потому что следующий парень, читающий ваш код, подумает: «WTF? должен ли? "

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

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

    7
    ответ дан Aaron Digulla 27 August 2018 в 12:20
    поделиться

    https://developer.mozilla.org/en/JavaScript/Reference/Operators/Operator_Precedence

    && до ||, поэтому ваше выражение эквивалентно to:

    firstRun == true || (selectedCategory != undefined && selectedState != undefined)
    
    3
    ответ дан Blindy 27 August 2018 в 12:20
    поделиться

    Он будет первым:

    firstRun == true || (selectedCategory != undefined && selectedState != undefined)
    

    Как правило, в большинстве языков программирования И имеет более высокий приоритет

    1
    ответ дан Marii 27 August 2018 в 12:20
    поделиться

    Это довольно хорошее правило. Вспомните эти операторы как математические:

    • AND - это умножение (например, 0 * 1 = 0 => FALSE)
    • OR добавляет (например, 0 + 1 = 1 => TRUE)

    Когда вы помните это, все, что вам нужно знать, это то, что умножение всегда приходит перед добавлением .

    12
    ответ дан Michal Leszczyk 27 August 2018 в 12:20
    поделиться

    В то время как приоритет логического оператора фактически не определен в Спецификации ECMAScript , MDN выполняет довольно хорошую работу и даже имеет отдельную страницу для Логические операторы .

    Мое беспокойство, я полагаю, поскольку логическая операционная прецеденция на самом деле не определена в спецификации ECMAScript, каждый отдельный поставщик браузеров может потенциально отличаться (я говорю с вами, Internet Explorer!) поэтому YMMV.

    В случае, если кто-то хочет протестировать это в разных браузерах, вот скрипт сценария: http://jsfiddle.net/HdzXq/

    1
    ответ дан pete 27 August 2018 в 12:20
    поделиться
    Другие вопросы по тегам:

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