Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Странность при вычислении выражений.. Это баг или фича? (https://javascript.ru/forum/misc/2651-strannost-pri-vychislenii-vyrazhenijj-ehto-bag-ili-ficha.html)

krvwd 27.01.2009 14:57

Странность при вычислении выражений.. Это баг или фича?
 
Почему

[function(){alert(123)}][0]()

вываливается с ошибкой, а

a = [function(){alert(123)}][0]()

работает?

Проверял под Firefox и Opera - результат одинаков.

Kolyaj 27.01.2009 15:02

Ни то, ни другое не вываливается.

rkwvd 28.01.2009 10:03

Да, вы правы, дело оказалось немного в другом:

// не работает
fun = function(){}
fun()
[function(){alert(123)}][0]()

// работает
fun = function(){}
fun();
[function(){alert(123)}][0]()

Gvozd 28.01.2009 12:21

здесь был пост не приносящий пользу

Андрей Параничев 28.01.2009 16:56

rkwvd,
Это не странность, так и должно быть. Точка с запятой после некоторых выражений обязательна, потому что не всегда интерпретатор будет автоматически вставлять её после (или до) выражений. Ваше первое выражение для интерпретатора выглядит так:
fun = function(){};
fun()[function(){alert(123)}][0](); // перенос не рассматривается, автоматически точка с запятой не вставлена.

Очевидно, что произойдет ошибка.

Kolyaj 28.01.2009 16:57

Но ошибка не происходит.

Андрей Параничев 28.01.2009 17:04

Kolyaj,
Как это? Происходит, вот:
try {
    fun = function(){}
    fun()
    [function(){alert(123)}][0]()
} catch(e) {
    alert(e); // Type Error: fun() is undefined
}

Такой текст ошибки, как я понимаю, из-за того, что результат fun() является не массивом (как ожидает конструкция), а undefined, из-за этого происходит ошибка типа.

Kolyaj 28.01.2009 17:30

Ага, а просто в консоль не вываливается.

Андрей Параничев 28.01.2009 17:49

Kolyaj,
У меня вываливалась. Правда на страницах нашего форума у меня FireBug вообще не работает, пишет в консоли:
Цитата:

Firebug cannot find _firebugConsole element TypeError: window._getFirebugConsoleElement is not a function Window 2651-strannost-pri-vychislenii-vyrazhenijj-ehto-bag-ili-ficha.html
И все.

Kolyaj 28.01.2009 18:04

У меня тоже фаербаг че-та глючит.


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