Странность при вычислении выражений.. Это баг или фича?
Почему
[function(){alert(123)}][0]() вываливается с ошибкой, а a = [function(){alert(123)}][0]() работает? Проверял под Firefox и Opera - результат одинаков. |
Ни то, ни другое не вываливается.
|
Да, вы правы, дело оказалось немного в другом:
// не работает fun = function(){} fun() [function(){alert(123)}][0]() // работает fun = function(){} fun(); [function(){alert(123)}][0]() |
здесь был пост не приносящий пользу
|
rkwvd,
Это не странность, так и должно быть. Точка с запятой после некоторых выражений обязательна, потому что не всегда интерпретатор будет автоматически вставлять её после (или до) выражений. Ваше первое выражение для интерпретатора выглядит так:
fun = function(){};
fun()[function(){alert(123)}][0](); // перенос не рассматривается, автоматически точка с запятой не вставлена.
Очевидно, что произойдет ошибка. |
Но ошибка не происходит.
|
Kolyaj,
Как это? Происходит, вот:
try {
fun = function(){}
fun()
[function(){alert(123)}][0]()
} catch(e) {
alert(e); // Type Error: fun() is undefined
}
Такой текст ошибки, как я понимаю, из-за того, что результат fun() является не массивом (как ожидает конструкция), а undefined, из-за этого происходит ошибка типа. |
Ага, а просто в консоль не вываливается.
|
Kolyaj,
У меня вываливалась. Правда на страницах нашего форума у меня FireBug вообще не работает, пишет в консоли: Цитата:
|
У меня тоже фаербаг че-та глючит.
|
| Часовой пояс GMT +3, время: 13:49. |