Ваша логика перестала работать, если optionalArg передается, но оценивает, поскольку ложь - пробует это как альтернативу
if (typeof optionalArg === 'undefined') { optionalArg = 'default'; }
Или альтернативная идиома:
optionalArg = (typeof optionalArg === 'undefined') ? 'default' : optionalArg;
Использование, какой бы ни идиома передает намерение лучше всего Вам!
.classA.classB
относится к элементу, который имеет классы A и B ([ class = "classA classB"
); тогда как .classA .classB
относится к элементу с class = "classB"
, производным от элемента с class = "classA"
.
Изменить: Spec для справки: Селекторы атрибутов (см. раздел 5.8.3 Селекторы классов)
Подобный стиль гораздо более распространен и будет нацелен на любой тип элемента класса «classB», который вложен внутри любого типа элемента класса «classA».
.classA .classB {
border: 1px solid; }
Это было бы работа, например, на:
<div class="classA">
<p class="classB">asdf</p>
</div>
Этот, однако, нацелен на любой тип элемента, который является как классом «classA», так и классом «classB». Этот тип стиля встречается реже, но все же полезен в некоторых обстоятельствах.
.classA.classB {
border: 1px solid; }
Это применимо к этому примеру:
<p class="classA classB">asdf</p>
Однако он не повлияет на следующее:
<p class="classA">fail</p>
<p class="classB">fail</p>
(Обратите внимание, что когда элемент HTML имеет несколько классов, они разделены пробелами.)