Ответ 1
Нет, нельзя назначить этот точный код переменной и заставить ее работать до 0, потому что синтаксический анализ этого кода, который дает 0, не является выражением †, и могут быть назначены только выражения. Причина, по которой вы получаете это 0, состоит в том, что фигурные скобки по существу игнорируются как пустой оператор, а затем вы получаете результат выражения + []
(т.е. Оператор унарного +, применяемый к пустому массиву). Поэтому для того, чтобы получить тот же результат, вам нужно будет изменить выражение так, чтобы оно просто сработало до +[]
. Например, вы можете сделать var a = ({}, + [])
, и это даст вам правильный ответ (потому что запятая вызывает + []
для оценки отдельно).
† Это также причина, по которой он дает другой ответ, когда вы пытаетесь его назначить. Это заставляет код анализироваться как выражение, поэтому {}
больше не является пустым блоком, а +
уже не является унарным +, но вместо этого он представляет собой двоичный плюс с пустым объектом и пустой массив в качестве операндов.