document.getElementById потиска, когато е нула

Опитвам се да намеря начин да потисна, когато document.getElementById е null, без да се налага да променям кода (напр. да поставя оператор if). Има ли някакъв начин да направя това, така че останалите извиквания на javascript след нулевата стойност все още да се изпълняват, без да променям кода за всяко място, където това се случва?

Наясно съм, че мога да поставя някои проверки (напр. оператори if и т.н.), но се опитвам да избегна това.

Примерен код:

  function example(){
         if(document.getElementById('fruits') == 0){ // this will be null
           doSomething() 
      } 
         var y = 1;
         alert(y);

     }

В горното, ако x е нула, останалите редове няма да се изпълнят. Опитвам се да намеря начин да „прескоча“ нулата, без да се налага да поставям проверки, оператори if/else и т.н. Използвам обаче наследен код, който има много от тези проблеми.


person Hadi    schedule 17.10.2014    source източник
comment
Изглежда като XY проблем. Можете ли да публикувате някакъв код?   -  person elclanrs    schedule 17.10.2014
comment
Не мисля, че разбирам какво искаш. Какво имаш предвид под потискане?   -  person Rafael Eyng    schedule 17.10.2014
comment
Имам работа с някакъв наследен код, написан от други. има някои избрани тагове, които вече не съществуват. Например в моя код имам нещо като: document.getElementById('fruits'); променлива x = 1; предупреждение (x). В този случай няма маркер за избор с ID „плодове“, следователно ще върне нула, следващите два реда няма да бъдат изпълнени. Търся начин кодът да продължава да се изпълнява, без да се налага да премахвам редове като document.getElementById('fruits'), които връщат нула.   -  person Hadi    schedule 17.10.2014
comment
Но защо не премахнете тези редове, ако вече не са уместни? Какво получавате от мръсното закърпване на това?   -  person elclanrs    schedule 17.10.2014
comment
Имам много от тях в кода. Това, което е малко странно е, че работи с IE, но не и с Chrome. С други думи, вместо да поставям „превръзка“, искам да реша проблема за всички.   -  person Hadi    schedule 17.10.2014
comment
@user3175046 - Както очаквахме, вие търсите пряк път, вместо всъщност да коригирате кода по правилния начин. Това е лоша идея. Поставете правилната корекция, като премахнете кода, който вече не трябва да е там.   -  person jfriend00    schedule 17.10.2014
comment
Добре, благодаря.. Просто проучвах вариантите. Мислех за нещо подобно, но не намерих нищо.   -  person Hadi    schedule 17.10.2014
comment
Вашият пример за код е грешен. Ако x е null, следващите редове ще продължат да се изпълняват добре, защото всичко, което сте направили, е да съхраните null в променлива, което е добре. Само когато се опитате да направите нещо като x.addEventListener(), ще получите изключение, защото null няма този метод.   -  person jfriend00    schedule 17.10.2014
comment
да, прав си. В действителния ми код няма присвояване, по-скоро е като проверка на стойността if(document.getElemenyBy('fruits') == 1) например   -  person Hadi    schedule 17.10.2014


Отговори (2)


Тъй като не сте публикували никакъв код (почти винаги получавате по-добър отговор, ако публикувате своя код), единственият теоретичен отговор, който можем да предложим, е „Не“, не можете да направите това, което питате. Ако имате код като този:

var obj = document.getElementById("test");
obj.addEventListener("click", function() {
    // event handler code here
})

След това, ако искате това да не генерира грешки, когато обектът test не съществува, тогава ТРЯБВА да поставите израз if, за да проверите върнатата стойност на getElementById(), за да избегнете грешката на следващия ред.


Без по-конкретен контекст (тъй като не сте включили НИКАКЪВ код), трябва да кажа, че въпросът ви звучи като общ програмен мързел. Изглежда, че не искате да добавите правилно обработване на грешки в кода, който се нуждае от това, и търсите мързелив изход.


Други идеи за разглеждане.

Можете да използвате манипулатори на изключения около блокове от код, за да уловите изключения. Тъй като манипулаторите на изключения не работят толкова добре, колкото операторите if, обикновено искате да използвате манипулатори на изключения за неочаквани условия на грешка, а не редовни пътища за връщане, но те със сигурност могат да се използват за улавяне на проблеми с липсващи DOM елементи.

person jfriend00    schedule 17.10.2014

Не бих използвал това в производствен код...

var dummyNode = document.createElement('div');
document.getElementByIdOriginal = document.getElementById;
document.getElementById = function(id) {
    var element = document.getElementByIdOriginal(id);
    return (element) ? element : dummyNode;
}
person Community    schedule 17.10.2014
comment
той може да върне каквото си поиска вместо null - person ; 17.10.2014
comment
И как това ще накара останалата част от неговия код, който използва този върнат резултат по неуточнени начини, да продължи да работи и да не генерира грешки? - person jfriend00; 17.10.2014
comment
Съгласете се, това просто изглежда като наистина лоша идея. - person elclanrs; 17.10.2014
comment
@jfriend00, защото той може да върне различен възел, така че всеки код, действащ върху него, да се забърква с посочения от него възел, вместо да хвърля грешка, когато срещне null - person ; 17.10.2014
comment
@Austin - ако това е, което предлагате, тогава отговорът ви трябва да показва това, защото това изобщо не показва кодът ви (връщате true, което няма да направи нищо от това). Лично аз смятам, че това е лоша идея. Звучи сякаш OP иска просто да избегне правилното обработване на грешки и по някакъв начин да погребе грешките, което не е добра идея. - person jfriend00; 17.10.2014
comment
@jfriend00 е добавен в редакцията. Съгласен съм, че това е ужасна идея, но е решение на зададения въпрос. - person ; 17.10.2014
comment
Всеки избира своя собствена стратегия за предоставяне на отговори тук на SO, но аз се опитвам да разбера какво наистина прави OP и се въздържам да им давам отговори на буквалния въпрос, който всъщност е лош начин за правене на нещата. Много въпроси тук на SO питат как да се постигне конкретно решение (това вече е лош начин) и по-добрите отговори се опитват да разберат действителния проблем и да предложат добро решение за него, вместо просто да отговорят на зададеното. - person jfriend00; 17.10.2014
comment
На всеки своето. Смятам, че ако не предложим буквалното решение, това ще бъде лоша услуга за бъдещите посетители със същия въпрос, които може да имат законна нужда от буквалния отговор. - person ; 17.10.2014