Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.01.2009, 14:57
krvwd
 
Сообщений: n/a

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

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

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

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

работает?

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

Ни то, ни другое не вываливается.
Ответить с цитированием
  #3 (permalink)  
Старый 28.01.2009, 10:03
rkwvd
 
Сообщений: n/a

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

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

// работает
fun = function(){}
fun();
[function(){alert(123)}][0]()
Ответить с цитированием
  #4 (permalink)  
Старый 28.01.2009, 12:21
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

здесь был пост не приносящий пользу
Ответить с цитированием
  #5 (permalink)  
Старый 28.01.2009, 16:56
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

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

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

Но ошибка не происходит.
Ответить с цитированием
  #7 (permalink)  
Старый 28.01.2009, 17:04
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

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

Такой текст ошибки, как я понимаю, из-за того, что результат fun() является не массивом (как ожидает конструкция), а undefined, из-за этого происходит ошибка типа.
Ответить с цитированием
  #8 (permalink)  
Старый 28.01.2009, 17:30
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Ага, а просто в консоль не вываливается.
Ответить с цитированием
  #9 (permalink)  
Старый 28.01.2009, 17:49
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

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
И все.
Ответить с цитированием
  #10 (permalink)  
Старый 28.01.2009, 18:04
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

У меня тоже фаербаг че-та глючит.
Ответить с цитированием
Ответ



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

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