, в котором элемент в настоящее время является классом «.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);
}
Конечно, это всего лишь поиск одного простого элемента (
/Image/g
), но вы можете поместить все в массив, например ,
/LI/g
,
= /UL/g
и т. д.
Мое эмпирическое правило, охватывающее в основном 99% всех вариантов использования условных операторов, является:
()
. or [...]
!
< , >= , === , !=, ...
&&
||
MDN дает исчерпывающий пробой: Javascript Operator Приоритет
, поэтому для вашего примера:
(firstRun == true || selectedCategory != undefined && selectedState != undefined)
равно
(firstRun == true) || ((selectedCategory != undefined) && (selectedState != undefined))
Для чего-либо более сложного, чем вышеупомянутые случаи, я бы посмотрел в рефакторинг кода для удобочитаемости в любом случае!
См. эту диаграмму для приоритета .
Я не собираюсь объяснять, что происходит, потому что следующий парень, читающий ваш код, подумает: «WTF? должен ли? "
Таким образом, лучшим решением является обертывание терминов в круглых скобках, даже если вы знаете приоритет, правильно его применяли и .
Это следует старой мудрости, что вы не должны делать все, что можете, только потому, что можете это сделать. Всегда следите за последствиями.
https://developer.mozilla.org/en/JavaScript/Reference/Operators/Operator_Precedence
&&
до ||
, поэтому ваше выражение эквивалентно to:
firstRun == true || (selectedCategory != undefined && selectedState != undefined)
Он будет первым:
firstRun == true || (selectedCategory != undefined && selectedState != undefined)
Как правило, в большинстве языков программирования И имеет более высокий приоритет
Это довольно хорошее правило. Вспомните эти операторы как математические:
AND
- это умножение (например, 0 * 1 = 0 => FALSE
) OR
добавляет (например, 0 + 1 = 1 => TRUE
) Когда вы помните это, все, что вам нужно знать, это то, что умножение всегда приходит перед добавлением .
В то время как приоритет логического оператора фактически не определен в Спецификации ECMAScript , MDN выполняет довольно хорошую работу и даже имеет отдельную страницу для Логические операторы .
Мое беспокойство, я полагаю, поскольку логическая операционная прецеденция на самом деле не определена в спецификации ECMAScript, каждый отдельный поставщик браузеров может потенциально отличаться (я говорю с вами, Internet Explorer!) поэтому YMMV.
В случае, если кто-то хочет протестировать это в разных браузерах, вот скрипт сценария: http://jsfiddle.net/HdzXq/