Валидность кода и философия JavaScript
Объясните, пожалуйста, разные случаи валидности/не валидности кода:
Не валиден <script type="text/javascript"> {"p1": "test"} </script> Валиден <script type="text/javascript"> ({"p1": "test"}) </script> Не валиден <script type="text/javascript"> alert(()); </script> Валиден <script type="text/javascript"> alert({}); </script> Валиден <script type="text/javascript"> alert({"p1": "test"}); </script> Валиден <script type="text/javascript"> alert(({"p1": "test"})); </script> Особо интересуют первые два случая |
Встречный вопрос: те случаи, которые у вас невалидны. А почему они должны быть валидны? Что должен делать первый невалидный код? А второй?
|
Цитата:
<script type="text/javascript"> var p = eval('{"p1": "test"}'); </script> Валиден <script type="text/javascript"> var p = eval('({"p1": "test"})'); </script> Такой ответ устроит? |
Вам сюда.
|
Цитата:
Я вот с логической точки зрения не вижу разницы между Валиден <script type="text/javascript"> "test" </script> и Не валиден <script type="text/javascript"> {"p1": "test"} </script> Что мешает парсеру(интерпретатору) понять, что у меня объект и почему круглые скобки помогают ему это сделать? |
Потому что фигурные скобки это не только объект, а ещё блок.
if (condition) { } {} воспринимаются как литерал объекта только внутри выражения, иначе они будут блоком. А в скобках это уже выражение. |
Далее. Вот такое выражение уже будет валидным
{p1: "test"}На подумать :) |
Цитата:
|
И я уже чувствую, как мозг отдаляется от черепа. Товарищи гуру, будет просто здорово, если вы кратко поясните приведенные моменты, в том числе вариант на "подумать" от Kolaj. Из ссылки на приложение А не удалось вычленить причины такого поведения js, похоже подобного уровня понимания языка я не достиг.
Или будет также отлично, если приведёте ссылку на тот раздел спецификации, где чётко поясняется механика разбора подобных вещей интерпретатором. Если он есть и он отличается от приложения А. Спасибо. |
Цитата:
Объяснять пока не буду, надо же подумать-то хоть немного. |
Часовой пояс GMT +3, время: 17:41. |