Ответ 1
Существуют две возможные интерпретации строки {} - 0
:
- Его можно интерпретировать как
{}; -0
, где{}
интерпретируется как пустой оператор блока, а-
- это оператор унарного отрицания (поэтому-0
- это просто "отрицательный ноль" ). Значение этого при оценке - это значение последнего оператора, который равен -0. - Его можно интерпретировать как
({} - 0)
, где{}
интерпретируется как пустой объект, а-
- оператор вычитания (поэтому0
вычитается из{}
).
В вашей первой строке это неоднозначно, поэтому он выберет первую интерпретацию. Во второй строке первая интерпретация недействительна (поскольку блок-оператор никогда не может быть частью выражения, которое вы заставляете с помощью скобок).