Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Непонятное(для меня) поведение eval (https://javascript.ru/forum/misc/47051-neponyatnoe-dlya-menya-povedenie-eval.html)

FanAizu 06.05.2014 19:10

Непонятное(для меня) поведение eval
 
Вот этот код почему-то выводит "number", а не "object".
alert
(
	typeof eval
	(
		'{abc : 10}'
	)
);


А вот этот код вообще не отрабатывает, пишет ошибка "SyntaxError: missing ; before statement typeof eval"


alert
(
	typeof eval
	(
		'{abc : 10, bba : 20}'
	)
);

Почему такое поведение? В документацие скзаано "Метод eval возвращает значение последнего вычисленного выражения.". В данном случае последним вычесленным выражением должен быть объект {abc : 10, bba : 20}
Что я не так понимаю? Спасибо.

Octane 06.05.2014 19:43

Такая конструкция воспринимается интерпретатором, как блок кода с меткой:
{
    label: 10
}
Скобки служат для группировки, инструкция может отсутствовать:
instruction {
   doSomething(); doSomethingElse()
}
Если без eval просто в скрипте написать:
{label1: 1, label: 2}
будет таже ошибка "SyntaxError: missing ; before statement".

Чтобы эта конструкция распознавалась как литерал объекта, она должна находиться в выражении, для этого достаточно обрамить код в скобки:
alert(typeof eval('({abc: 10})'))

alert(typeof eval('({abc: 10, bba: 20})'))


Часовой пояс GMT +3, время: 18:41.