Показать сообщение отдельно
  #15 (permalink)  
Старый 25.07.2012, 17:20
Профессор
Отправить личное сообщение для oneguy Посмотреть профиль Найти все сообщения от oneguy
 
Регистрация: 31.05.2012
Сообщений: 396

Причина этих разногласий между браузерами в вычислении оператора ||.
Выражение false || foo.bar в Опере возвращает значение Reference с базой foo и именем "bar", в остальных браузерах - функцию foo.bar. Поэтому при вызове результата этого выражения как функции в Опере значение foo передаётся в качестве аргумента this, а в других браузерах - глобальный объект (или undefined в строгом режиме). Та же особенность Оперы проявляется в следующем коде:
var a=1;
(0||a)=2; // во всех браузерах, кроме Оперы что-то типа ReferenceError: invalid assignment left-hand side
alert(a); // в Опере выдаёт 2

Последний раз редактировалось oneguy, 25.07.2012 в 17:23.
Ответить с цитированием