a = (b = 'string is truthy'); // b gets string; a gets b, which is a primitive (copy)
a = (b = { c: 'yes' }); // they point to the same object; a === b (not a copy)
(a && b)
es lógicamente (a ? b : a)
y se comporta como una multiplicación (p. ej. !!a * !!b
)
(a || b)
es lógicamente (a ? a : b)
y se comporta como una suma (p. ej. !!a + !!b
)
(a = 0, b)
es corto para no preocuparse si a
es verdad, implícitamente regresab
a = (b = 0) && "nope, but a is 0 and b is 0"; // b is falsey + order of operations
a = (b = "b is this string") && "a gets this string"; // b is truthy + order of ops
Precedencia del operador de JavaScript (orden de operaciones)
Tenga en cuenta que el operador de coma es en realidad el operador menos privilegiado, pero los paréntesis son los más privilegiados, y van de la mano al construir expresiones de una línea.
Eventualmente, es posible que necesite 'thunks' en lugar de valores codificados, y para mí, un thunk es tanto la función como el valor resultante (la misma 'cosa').
const windowInnerHeight = () => 0.8 * window.innerHeight; // a thunk
windowInnerHeight(); // a thunk