Почему при if (6 || 5 && (x = 1)) переменная x не равна единице?
потому что, фактически, ваше выражение выглядит вот таким образом:var x = 0
if (6 || (5 && (x = 1))) document.write(x); // 0
логический оператор || работает следующим образом: если первый операнд можно привести к true, остальная часть выражения не вычисляется.
https://tc39.github.io/ecma262/#sec-binary-logical...
вторая часть п.12.13.3 касается как раз указанного в начале обсуждения случая.
Это тоже самое что написать if(6) {}
Если первая часть условия возвращает что-нибуть, тогда другая игнорируется.
Чтобы проверялась также вторая часть условия нужно либо 6 с чем-то сравнивать, либо вместо || (или) написать && (и)