JavaScript Cortocircuito en operadores booleanos.


Ejemplo

El operador-e ( && ) y el operador-o ( || ) emplean cortocircuitos para evitar trabajos innecesarios si el resultado de la operación no cambia con el trabajo adicional.

En x && y , y no se evaluará si x evalúa como false , porque se garantiza que toda la expresión es false .

En x || y , y no se evaluará si x evalúa como true , porque se garantiza que toda la expresión es true .

Ejemplo con funciones

Tome las siguientes dos funciones:

function T() { // True
  console.log("T");
  return true;
}

function F() { // False
  console.log("F");
  return false;
}

Ejemplo 1

T() && F(); // false

Salida:

'T'
'F'

Ejemplo 2

F() && T(); // false

Salida:

'F'

Ejemplo 3

T() || F(); // true

Salida:

'T'

Ejemplo 4

F() || T(); // true

Salida:

'F'
'T'


Cortocircuito para evitar errores.

var obj; // object has value of undefined
if(obj.property){ }// TypeError: Cannot read property 'property' of undefined
if(obj.property && obj !== undefined){}// Line A TypeError: Cannot read property 'property' of undefined

Línea A: si invierte el orden, la primera declaración condicional evitará el error en el segundo al no ejecutarlo si arrojaría el error

if(obj !== undefined && obj.property){}; // no error thrown 

Pero solo se debe usar si esperas undefined

if(typeof obj === "object" && obj.property){}; // safe option but slower

Cortocircuito para proporcionar un valor predeterminado

El || El operador se puede usar para seleccionar un valor "verdadero" o el valor predeterminado.

Por ejemplo, esto se puede usar para asegurar que un valor anulable se convierta en un valor no anulable:

var nullableObj = null;
var obj = nullableObj || {};  // this selects {}

var nullableObj2 = {x: 5};
var obj2 = nullableObj2 || {} // this selects {x: 5}

O devolver el primer valor de verdad.

var truthyValue = {x: 10};
return truthyValue || {}; // will return {x: 10}

Lo mismo se puede usar para retroceder varias veces:

envVariable || configValue || defaultConstValue // select the first "truthy" of these

Cortocircuito para llamar a una función opcional

El operador && se puede usar para evaluar una devolución de llamada, solo si se pasa:

function myMethod(cb) {
    // This can be simplified
    if (cb) {
       cb();
    }

    // To this
    cb && cb();
}

Por supuesto, la prueba anterior no valida que cb sea ​​en realidad una function y no solo un Object / Array / String / Number .