5 апр. 2009 г.

Знатокам JavaScript

Как это работает?

if('mySuperProperty' in window) {
    alert(window['mySuperProperty']);
}

var mySuperProperty = 1;

8 комментариев:

alpha комментирует...

Ну если никто не знает, то могу только посоветовать почитать ECMA (пункты 10.1.3 и 10.2) :)

ast комментирует...

А вообще нафига этот "in window"? :-)

alpha комментирует...

"in window" помогает понять суть данной проблемы. Вернее не проблемы, а того как работает js-core.

Pavel Chuchuva комментирует...

Под Firefox 3 и IE 7 получаю 'undefined'. Как воспроизвести проблему (поведение)? Что должно получиться?

alpha комментирует...

Ну как бы вопрос и был в том, почему срабатывает if перед alert, хотя значение undefined :)

mich комментирует...

Интерпретатор работает таким образом, что все var'ы переменных поднимает в хэд функций. Поэтому, если объявить какую либо переменную хоть в конце метода, доступ к ней есть уже в начале:


function func() {
  alert(initializedProperty);// скажет undefined
  alert(property);// скажет undefined

  // много бреда...

  var initializedProperty = 1;
  var property;
}

func();

mich комментирует...

Вместо подтверждения:


function func(){
  alert(initializedProperty);// вывалится с ошибкой ReferenceError: initializedProperty is not defined
  alert(property);// сказал бы undefined

  // много бреда...

  initializedProperty = 1;
  var property;
}

func();

Анонимный комментирует...

Не успел еще заглянуть в стандарт, но предположу, что undefined существует как один из типов в скопе window, что и возвращает mySuperProperty на момент if'а.