Because assignment is an expression. It has nothing specifically to do with the position being a conditional.
Conditionals need an expression, and assignment fits the bill, so it works.
Conditionals need an expression, and assignment fits the bill, so it works.
No, but it has a lot to do with the way humans write code. This is the source of the bug, not the logic. eg Why bother having whitespace that the compiler can't use (typically)? Human readability.
The concession to not take into account human failing, is pathological.