Ответ 1
return a && b
означает "return a, если a является ложным, верните b, если a является правдой".
Это эквивалентно
if (a) return b;
else return a;
Что означает возврат значения с помощью & &?
else if (document.defaultView && document.defaultView.getComputedStyle) {
// It uses the traditional ' text-align' style of rule writing,
// instead of textAlign
name = name.replace(/([A-Z]) /g, " -$1" );
name = name.toLowerCase();
// Get the style object and get the value of the property (if it exists)
var s = document.defaultView.getComputedStyle(elem, " ") ;
return s && s.getPropertyValue(name) ;
return a && b
означает "return a, если a является ложным, верните b, если a является правдой".
Это эквивалентно
if (a) return b;
else return a;
Логический оператор AND && работает аналогично. Если первый объект ложный, он возвращает этот объект. Если это правда, он возвращает второй объект. (из https://www.nfriedly.com/techblog/2009/07/advanced-javascript-operators-and-truthy-falsy/).
Интересные вещи!
РЕДАКТИРОВАТЬ: Таким образом, в вашем случае, если document.defaultView.getComputedStyle(elem, " ")
не возвращает значимое ("правдивое") значение, это значение возвращается. В противном случае он возвращает s.getPropertyValue(name)
.
Оператор AND && выполняет следующие действия:
Как я уже сказал, каждый операнд конвертируется в логическое значение, если он равен 0, то он истинен, а любое другое значение, отличное от 0 (1, 56, -2 и т.д.), Ложно
Другими словами, AND возвращает первое ложное значение или последнее значение, если ничего не найдено.
// if the first operand is truthy,
// AND returns the second operand:
return 1 && 0 // 0
return 1 && 5 // 5
// if the first operand is falsy,
// AND returns it. The second operand is ignored
return null && 5 // null
return 0 && "no matter what" // 0
Мы также можем передать несколько значений подряд. Посмотрите, как возвращается первый фальшивый
return 1 && 2 && null && 3 // null
Когда все значения верны, возвращается последнее значение:
return 1 && 2 && 3 // 3, the last one
Вы можете узнать больше о логическом операторе здесь https://javascript.info/logical-operators