В этом случае ||
является оператором «логическое значение» или «логическое значение». Как и во многих языках, логические операторы в JavaScript закорочены. Например, предположим, что у меня есть следующее логическое выражение:
var booleanValue = someFunction() || otherFunction()
Если возвращаемое значение первой функции является истинно-эквивалентным, нет необходимости оценивать второе значение, и otherFunction()
не будет выполняться, потому что оператор "или" возвращает истинно-эквивалентное значение, независимо от того, является ли какая-то из его оперированных истинно-эквивалент. Это хорошо, потому что делает ваш код более эффективным: оценивается только нужное выражение.
Кроме того, в этом случае наблюдается любопытное поведение: поскольку первое значение выражения является истинно-эквивалентным, JavaScript просто возвращает его как результат выражения, потому что это в любом случае означало бы, что все выражение истинно.
В вашем коде значение color[idx]
является истинно-эквивалентным, если оно установлено. Поскольку в операции «или» это значение равнозначно истинному значению, оно возвращается как значение выражения. Однако, если он не установлен, возвращается undefined
, что является ложно-эквивалентным значением. Таким образом, JavaScript должен оценить следующее значение, чтобы определить, является ли выражение «или» истинным. Поскольку следующее значение является последним и значение выражений полностью зависит от него, выражение возвращает следующее значение, если первое является ложно-эквивалентным.