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)
логически (a ? b : a)
и ведет себя как умножение (например, !!a * !!b
)
(a || b)
логически (a ? a : b)
и ведет себя как сложение (например, !!a + !!b
)
(a = 0, b)
- это сокращение, означающее, что все равно, если a
верно, неявно возвращает b
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
Приоритет оператора JavaScript (порядок операций)
Обратите внимание, что оператор запятой на самом деле является оператором с наименьшими привилегиями, но круглые скобки являются наиболее привилегированными, и они идут рука об руку при построении однострочных выражений.
В конце концов вам могут понадобиться «thunks», а не жестко заданные значения, и для меня thunk - это и функция, и результирующее значение (одна и та же «вещь»).
const windowInnerHeight = () => 0.8 * window.innerHeight; // a thunk
windowInnerHeight(); // a thunk