2015-03-19 4 views
0

Почему это работает на JavaScript?Объяснение для этого синтаксиса javascript

undefined_variable_here: 2
возвращает 2 в консоли

Тогда я попробовал это, и это также работал
{another_undefined_variable: 3}

Есть ли название или объяснение для этого?

+0

Последний явно законный. Он просто инициализирует объект в JSON. –

+0

Это неверно, потому что {a: 1, b: 2} выдает ошибку! –

+1

@MathiasLykkegaardLorenzen это было бы [JSON] (http://en.wikipedia.org/wiki/JSON) при цитировании имени идентификатора. Код OPs - это просто JavaScript. –

ответ

1

Ваш первый пример - это обозначение с надписью: выражение «2» с меткой «undefined_variable_here». Хотя JavaScript не имеет оператора goto, есть несколько способов переходить к конкретным операторам при определенных обстоятельствах. Чтобы сделать это, эти утверждения должны иметь прикрепленный идентификатор определенного типа, так что машина знает, куда идти, а метки предоставляют этот идентификатор.

Ваш второй пример литерал объекта: выражение для одного объекта, который имеет одно свойство, называемое «another_undefined_variable» со значением 3.

В обоих случаях вставка точек с запятой неявно заканчивает заявление. Таким образом, первый пример, по существу, эквивалентно утверждению:

2; 

Это утверждение не очень полезно само по себе, потому что он ничего не делает, но является правовой JavaScript. Второй пример фактически немного работает, поскольку он должен создать объект, но поскольку он не попадает в переменную, ссылок нет: вы не можете попасть на него, а сборщик мусора вытрит его при следующей возможности. Все еще не очень полезно, но все же легально.

+0

Спасибо за отличный ответ! Но тогда почему добавление другого элемента не сработало бы? Скажите: '{a: 2, b: 3}' –

2

Вы в основном создаете label. Во втором случае, даже если вам кажется объект, вы просто окружили метку block statement. Короче говоря, это похоже на то, что вы просто набрали «2» в обоих случаях для веб-консоли.

Смежные вопросы