На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: ElcnU, ANDLL, fatalist
  
> Проверка существования переменной , и элемента
    Делаю так:
    ExpandedWrap disabled
      function myFunc(x);
      {
        if (x) var y = document.getElementById(x);
        . . .
        if (y) y.innerHTML = 'бла-бла-бла';
      }
    Грамотно ли так проверять существование переменной y (несмотря на то, что этот код работает)?

    Добавлено
    И заодно сюда же вопрос: как узнать, существует ли элемент с именем x ?

    Добавлено
    Вот ещё один вариант:
    ExpandedWrap disabled
      function myFunc(x);
      {
        var y = document.getElementById(x);
        . . .
        if (y) y.innerHTML = 'бла-бла-бла';
      }


    Добавлено
    Т.е. в первом случае проверяется значение x (если оно НЕпустое, то переменная y создаётся и далее идёт присвоение innerHTML).
    Во втором случае y проверяется элемент x; если он существует, то идёт присвоение innerHTML.
      Цитата Jin X @
      Грамотно ли так проверять существование переменной y

      И да и нет. Код будет работать, но в случае y = 0, y = null, y = [] - работать не будет.

      ExpandedWrap disabled
        if (y !== undefined) { ... }


      Добавлено
      Ой, не заметил, что y - это DOM объект. Тогда всё ок =)
        Погоди.
        ExpandedWrap disabled
            var y = document.getElementById('blabla');
            alert(y);
        выдаёт null, при этом всё работает...

        Добавлено
        И вот так тоже срабатывает:
        ExpandedWrap disabled
            var y = document.getElementById('blabla');
            if (y == null) alert('null');
        === тоже :)
          Цитата Jin X @
          выдаёт null, при этом всё работает...

          потому что переменная существует, но содержит null. Еслиб не существовала (вопрос же твой, цитата: "Грамотно ли так проверять существование переменной") - был бы андефайн.
            Так, ты же говоришь:
            Цитата Serafim @
            в случае y = 0, y = null, y = [] - работать не будет.
              Ну так y у нас DOM-объект, а null отрицательное значение, т.е. которое и следует игнорировать. ;)

              Добавлено
              Не будет работать в случаях:

              1) var a = false || null; (т.е. ожидаешь либо false, либо null)
              2) var a = false || [];
              3) var a = false || 0;
              4) var a = false || '';

              В этих случаях проверка через if(a) ожидая, что она будет успешной только при a = false - ошибочна.
                Ок, а в первом случае, когда:
                ExpandedWrap disabled
                  function myFunc(x);
                  {
                    if (x) var y = document.getElementById(x);
                    . . .
                    if (y) y.innerHTML = 'бла-бла-бла';
                  }
                Проверка if (y) корректна? Ведь, если if (x) не выполнится, переменная y не создастся.

                Добавлено
                У меня, например, конструкция:
                ExpandedWrap disabled
                  if (y !== undefined) alert('ok!'); else alert('undefined!');
                вообще не работает, если y не определено!
                Uncaught ReferenceError: y is not defined

                Вот так, может?
                ExpandedWrap disabled
                  if (typeof y != 'undefined') alert('ok!'); else alert('undefined!');
                  Цитата Jin X @
                  Проверка if (y) корректна?

                  Цитата Serafim @
                  Ой, не заметил, что y - это DOM объект. Тогда всё ок =)


                  Добавлено
                  Цитата Jin X @
                  Вот так, может?

                  точно :yes: сглупил я.

                  CoffeScript предлагает такой же вариант
                  Сообщение отредактировано: Serafim -
                    Помнится Дядя Боб меня научил:
                    ExpandedWrap disabled
                      if (typeof(element) != 'undefined')
                         //exists


                    Добавлено
                    Цитата Jin X @
                    Вот так, может?
                    а, ну вот оно :)
                    Сообщение отредактировано: fatalist -
                      Цитата Serafim @
                      Цитата Jin X @
                      Проверка if (y) корректна?
                      Цитата Serafim @
                      Ой, не заметил, что y - это DOM объект. Тогда всё ок =)

                      y - это DOM-объект только при выполнении условия if (x). А вот при НЕвыполнении y будет undefined!
                      Uncaught ReferenceError: y is not defined
                        ты же сам сказал, что null, а не undefined :wacko:
                        Цитата Jin X @
                        выдаёт null, при этом всё работает...


                        Добавлено
                        Короче, проверять наличие всегда стоит так:
                        ExpandedWrap disabled
                          typeof some !== "undefined" && some !== null


                        Обычно в любых вопросах по "микроалгоритмам" JS я обращаюсь к кофейной реализации, там много всяких приёмчиков, которые упрощают жизнь, в том числе и данный случай с проверкой: http://coffeescript.org/#try:some%20%3D%20...7Bsome%3F%7D%22
                          Цитата Serafim @
                          ты же сам сказал, что null, а не undefined
                          ты видишь, что там 2 разных примера?
                          в первом будет undefined, во втором ( var y = document.getElementById(x); ) = null, если элемента с именем x не сущестует.
                          Сообщение отредактировано: Jin X -
                            Цитата Jin X @
                            ты видишь, что там 2 разных примера?

                            Не обратил внимание, что там другая переменная :whistle:

                            Добавлено
                            Если аргумент не задан, то очевидно undefined, что, учитывая замечание fatalist - проверяется с помощью typeof x !== 'undefined' && x !== null. y возвращает либо DOM, либо null, что проверяется либо точно так же, либо как ты написал
                            Сообщение отредактировано: Serafim -
                            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                            0 пользователей:


                            Рейтинг@Mail.ru
                            [ Script execution time: 0,0947 ]   [ 15 queries used ]   [ Generated: 27.04.24, 08:01 GMT ]