Operadores lógicos em JavaScript – como você os usa?

Eu não entendo como && , || e ! trabalho … ambos com bools e outros tipos de dados. Como você os usa?

    Todos os valores em Javascript são “verdadeiros” ou “falsos”.

    • a && b avalia o primeiro operando falsamente
    • a || b a || b avalia para o primeiro operando truthy

    Ambos os operadores não avaliarão nenhum operando após o retorno.
    Se todos os operandos não corresponderem, ele será avaliado para o último.

    • !a avaliado como true se a é false e false se a é verdadeiro.

    Todos os valores são verdadeiros, exceto os seguintes, que são falsos :

    • false
    • +0
    • -0
    • NaN
    • ""
    • null
    • undefined
    • document.all

    Se você quiser testar se ambas as duas condições são verdadeiras, use o &&:

     if (isX && isY) { // Do something. } 

    Se você quiser testar se uma ou ambas as condições são verdadeiras, use ||:

     if (isX || isY) { // Do something. } 

    O ! inverte um booleano (um valor verdadeiro se torna falso e vice-versa).