Почему оператор не должен менять значение своих параметров?
Ты такой пишешь в коде
6 = 4 + 2
А у тебя бац и 2 превратилось в 6, не иначе магия.
Не надо думать, что если оператор унарный, то значит его вызов должен привести к изменению исходного объекта.

var valid = true;
if (!valid) {
  ...
}
if (valid){
  ...
}
и что было бы если бы оператор ! изменил бы исходную переменную valid?