Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.11.2011, 14:03
Новичок на форуме
Отправить личное сообщение для peterpan7700 Посмотреть профиль Найти все сообщения от peterpan7700
 
Регистрация: 25.11.2011
Сообщений: 3

Валидность кода и философия 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>


Особо интересуют первые два случая
Ответить с цитированием
  #2 (permalink)  
Старый 25.11.2011, 14:11
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Встречный вопрос: те случаи, которые у вас невалидны. А почему они должны быть валидны? Что должен делать первый невалидный код? А второй?
Ответить с цитированием
  #3 (permalink)  
Старый 25.11.2011, 15:33
Новичок на форуме
Отправить личное сообщение для peterpan7700 Посмотреть профиль Найти все сообщения от peterpan7700
 
Регистрация: 25.11.2011
Сообщений: 3

Сообщение от Kolyaj Посмотреть сообщение
Встречный вопрос: те случаи, которые у вас невалидны. А почему они должны быть валидны? Что должен делать первый невалидный код? А второй?
Не валиден
<script type="text/javascript">
	var p = eval('{"p1": "test"}');
</script>


Валиден
<script type="text/javascript">
	var p = eval('({"p1": "test"})');
</script>


Такой ответ устроит?
Ответить с цитированием
  #4 (permalink)  
Старый 25.11.2011, 15:44
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Вам сюда.
Ответить с цитированием
  #5 (permalink)  
Старый 25.11.2011, 16:07
Новичок на форуме
Отправить личное сообщение для peterpan7700 Посмотреть профиль Найти все сообщения от peterpan7700
 
Регистрация: 25.11.2011
Сообщений: 3

Сообщение от Kolyaj Посмотреть сообщение
Вам сюда.
Спасибо, что не гуглить послали. Значит у меня есть надежда, что Вы удовлетворите мою просьбу разжевать свой ответ?

Я вот с логической точки зрения не вижу разницы между

Валиден
<script type="text/javascript">
	"test"
</script>

и
Не валиден
<script type="text/javascript">
	{"p1": "test"}
</script>


Что мешает парсеру(интерпретатору) понять, что у меня объект и почему круглые скобки помогают ему это сделать?
Ответить с цитированием
  #6 (permalink)  
Старый 25.11.2011, 16:20
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Потому что фигурные скобки это не только объект, а ещё блок.
if (condition) {

}

{} воспринимаются как литерал объекта только внутри выражения, иначе они будут блоком. А в скобках это уже выражение.
Ответить с цитированием
  #7 (permalink)  
Старый 25.11.2011, 16:22
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Далее. Вот такое выражение уже будет валидным
{p1: "test"}
На подумать
Ответить с цитированием
  #8 (permalink)  
Старый 25.11.2011, 16:34
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

Сообщение от Kolyaj Посмотреть сообщение
Далее. Вот такое выражение уже будет валидным
{p1: "test"}
На подумать
Это только вынесет мозг тому, кто не сечёт фишку.))
__________________
29375, 35
Ответить с цитированием
  #9 (permalink)  
Старый 25.11.2011, 17:58
Аватар для GuardCat
Просто любитель
Отправить личное сообщение для GuardCat Посмотреть профиль Найти все сообщения от GuardCat
 
Регистрация: 13.09.2011
Сообщений: 300

И я уже чувствую, как мозг отдаляется от черепа. Товарищи гуру, будет просто здорово, если вы кратко поясните приведенные моменты, в том числе вариант на "подумать" от Kolaj. Из ссылки на приложение А не удалось вычленить причины такого поведения js, похоже подобного уровня понимания языка я не достиг.

Или будет также отлично, если приведёте ссылку на тот раздел спецификации, где чётко поясняется механика разбора подобных вещей интерпретатором. Если он есть и он отличается от приложения А.

Спасибо.
Ответить с цитированием
  #10 (permalink)  
Старый 25.11.2011, 18:02
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от GuardCat
Если он есть и он отличается от приложения А.
Он есть, он ничем не отличается от приложения А, он и есть приложение А.

Объяснять пока не буду, надо же подумать-то хоть немного.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
скрыть из исходного кода часть javascript кода. javasc Javascript под браузер 10 12.03.2014 09:32
Сравнительное тестирование производительности JavaScript кода c0deMaster Библиотеки/Тулкиты/Фреймворки 3 17.05.2011 15:11
Последние книги по JavaScript! monolithed Учебные материалы 7 26.10.2010 19:40
Выдвет ошибку JavaScript Ромио Opera, Safari и др. 4 21.10.2010 20:34
динамическя вставка javascript кода delovek Общие вопросы Javascript 5 28.04.2009 23:15