возвращаясь с && - PullRequest
       13

возвращаясь с &&

24 голосов
/ 20 декабря 2010

Что означает возвращать значение с &&?

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) ;

Ответы [ 3 ]

51 голосов
/ 20 декабря 2010

return a && b означает «вернуть a, если a ложно, вернуть b, если a верно».

Это эквивалентно

if (a) return b;
else return a;
15 голосов
/ 20 декабря 2010

Логический оператор AND && работает аналогично. Если первый объект ложный, он возвращает этот объект. Если это правда, он возвращает второй объект. (от https://www.nfriedly.com/techblog/2009/07/advanced-javascript-operators-and-truthy-falsy/).

Интересные вещи!

EDIT: Итак, в вашем случае, если document.defaultView.getComputedStyle(elem, " ") не возвращает значащее («истинное») значение, это значение возвращается. В противном случае возвращается s.getPropertyValue(name).

2 голосов
/ 30 декабря 2018

Оператор AND && выполняет следующие действия:

  • Оценить операнды слева направо.
  • Для каждого операнда преобразовать его в логическое значение. Если результат равен false, остановите и верните исходное значение этого результата .
  • Если все другие операнды были оценены (т.е. все они были правдивыми), верните последний операнд.

Как я уже сказал, каждый операнд конвертируется в логическое значение, если он равен 0, это истинно , а все остальные значения, отличные от 0 (1, 56, -2 и т. Д.), Равны falsy

Другими словами, 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

...