2016-12-05 2 views
3

я работаю понимание библиотеки JavaScript, и я наткнулся на это заявление:JavaScript && Оператор используется для возвращения

const assetsManifest = process.env.webpackAssets && JSON.parse(process.env.webpackAssets)

Тогда позже в библиотеке, она использует assetsMannifest как объект, например,

assetsManifest['/vendor.js']

Я думал, что оператор && используется только для возврата boolean значения логических проверок. Может кто-нибудь объяснить мне, что здесь происходит?

Большое спасибо,

Климент

+1

логические операторы возвращают _truthy_ вещь, но не возвращает логическое значение. Например, '1 || false // 1', 'true &&" a "//" a "' – vlaz

+0

Обратите внимание, что это относится к некоторым языкам, таким как Javascript с синтаксисом типа C. Другие с очень похожим синтаксисом (и теми же операторами) не ведут себя так и действительно возвращают только логическое, а не последнее оцениваемое значение. – jcaron

+0

Логические операторы обычно используются с булевыми (логическими) значениями. Когда они есть, они возвращают логическое значение. Однако, && и || операторы фактически возвращают значение одного из указанных операндов, поэтому, если эти операторы используются с небулевыми значениями, они могут возвращать небулево значение. проверьте ниже ссылку https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators. ваше дело process.env.webpackAssets - это объект, такой как String, преобразованный в объект, и доступ к ключу '' /vendor.js на объекте – vijay

ответ

3

& & возвращает первое значение преобразования в false или последнего значения преобразования в true. Это потому, что нет необходимости для расчета полного логического условия с & & если первое значение falsy

console.log(55 && 66); 
 
console.log(0 && 77); 
 
console.log(88 && 0);

Также вы можете использовать && или || в качестве if оператора:

if (itsSunny) takeSunglasses(); 

равна

itsSunny && takeSunglasses(); 
1

Оба && и || являются evaluting там аргументы в ленивом режиме и возвращает последнее значение, после того, как ведьму результат известен.

123 && (0 || '' && 78) || 7 && 8 || [] && {} || 90 || 77 && 13 

###_^^ both results are possible 123 && ??? 
     #_^^ first part is falsy, resume 0 || ?? 
      #####_^^ can't be true, return '' 
      ^^_########## 0 || '' return '' 
    ^^_################ return '' 
#######################_^^ resume 
          #_^^ resume 
          ^^_# return 8 
         ^^_###### return 8 
            ^^_########################## drop 

И результат 8.

1

Этот оператор не всегда возвращает true или false. Он не работает, как на некоторых других языках программирования. В JavaScript && оператор возвращает первое значение, если оно falsy или второе, если нет.

Примеры:

null && 5 возвращает null, потому что null является falsy.

"yeah yeah" && 0 возвращение 0 т.к. каждый нить правза.

Не так очевидно :-)

Дальнейшее чтение:

Why don't logical operators (&& and ||) always return a boolean result?

+0

Я нашел ссылку невероятно полезной. Особенно, когда оператор '||' поддерживает первое истинное значение, а оператор '&&' возвращает самое правильное значение, предоставленное всем, до того, как оно было правдой. – Clement

3

В этом контексте он проверяет, является ли истинное значение process.env.webpackAssets. Если он будет оценивать и возвращать следующую часть.в этом случае JSON.parse(process.env.webpackAssets)

Логика, по существу

if (process.env.webpackAssets) { 
    return JSON.parse(process.env.webpackAssets) 
} 
else { 
    return process.env.webpackAssets // (null | undefined | 0 | '' | false) 
} 
+1

Или более точно, 'else return process.env.webpackAssets' - это значение также может быть« null »или« undefined », например. – vlaz

+0

Хорошая точка. Я обновлю. – synthet1c

Смежные вопросы