Упс, урадио сам то поново: Отклањање уобичајених грешака у ЈаваСцрипт-у

Упс, урадио сам то поново: Отклањање уобичајених грешака у ЈаваСцрипт-у

Писање ЈаваСцрипт кода може бити изазовно и понекад потпуно застрашујуће, као што су многи програмери упознати. У процесу рада неминовно настају грешке, а неке од њих се често понављају. Овај чланак, намењен програмерима почетницима, говори о овим грешкама и како их решити. Ради јасноће, називи функција, својстава и објеката су узети из популарна песма. Све ово вам помаже да брзо запамтите како да исправите уобичајене грешке.

Подсећамо: за све читаоце „Хабра“ – попуст од 10 рубаља при упису на било који курс Скиллбок користећи промотивни код „Хабр“.

Скиллбок препоручује: Практични курс „Програмер за мобилне уређаје“.

ТипеЕррор: својство није дефинисано

let girl = {
    name: "Lucky",
    location: "Hollywood",
    profession: "star",
    thingsMissingInHerLife: true,
    lovely: true,
    cry: function() {
        return "cry, cry, cries in her lonely heart"
    }
}
console.log(girl.named.lucky)

Пример кода изнад даје грешку Унцаугхт ТипеЕррор: Не могу да прочита својство 'луцки' од недефинисаног. Проблем је у томе што објекат девојке нема својство имена, иако има својство имена. А пошто својство гирл.намед није дефинисано, не можете му приступити, јер формално не постоји. Али ако замените гирл.намед.луцки са гирл.наме, онда ће све радити и програм ће вратити Луцки.

Можете сазнати више о некретнинама прочитајте овде.

Како да решите грешке типа

Грешке типа настају када програмер покуша да изврши радње над подацима који се не подударају са одређеним типом. Примери укључују коришћење .болд(), тражење недефинисаног својства или позивање функције која заправо није функција.

Дакле, ако покушате да позовете гирл(), добићете грешку Унцаугхт ТипеЕррор: вашаВариабле.болд није функција и девојка није функција, јер је то заправо објекат који се позива, а не функција.

Да бисте елиминисали грешке, потребно је да проучите варијабле. Дакле, шта је девојка? Шта је девојка.име? Можете сазнати тако што ћете анализирати код, приказати променљиве користећи цонсоле.лог, команду за отклањање грешака или позвати име променљиве у конзоли. Морате бити сигурни да је могуће радити на типу података садржаном у променљивој. Ако се не уклапа, промените га, на пример, додајте услов или покушајте..цатцх блок - и стекните контролу над извршавањем операције.

Стацк Оверфлов

Ако је веровати ауторима текста песме Баби Оне Море Тиме (ово је Бритни Спирс, да), онда реч хит у овом контексту означава жељу певачице да поново буде позвана (ево објашњења самог контекста песма – напомена преводиоца). Могуће је да ће ова жеља довести до повећања броја позива у стварном животу. Али у програмирању, ово је рекурзија која може изазвати грешку ако се стек позива препуни.

Грешке изгледају овако:

Грешка: Понестало простора на стегу (Едге)
Унутрашња грешка: превише рекурзије (Фирефок)
РангеЕррор: Максимална величина стека позива је премашена (Цхроме)

До преливања стека долази ако програмер не узме у обзир основни случај у рекурзији, или ако код не адресира предвиђени случај.

function oneMoreTime(stillBelieve=true, loneliness=0) {
    if (!stillBelieve && loneliness < 0) return
    loneliness++
    return oneMoreTime(stillBelieve, loneliness)
}

У овом случају, стиллБелиеве никада не може бити лажан, тако да ће се онеМореТиме позивати сваки пут, али функција никада неће бити завршена.

Ако почнете да се ослањате на два пријатеља, то ће смањити усамљеност и нећете морати да чекате позив.

function oneMoreTime(stillBelieve=true, loneliness=0) {
    if (!stillBelieve && loneliness < 0) return
    loneliness--
    stillBelieve = false
    return oneMoreTime(stillBelieve, loneliness)
}

Пример су случајеви са бесконачним петљама, када систем не генерише поруку о грешци, али се страница на којој се извршава ЈаваСцрипт код једноставно замрзне. Ово се дешава ако петља вхиле нема услов завршетка.

let worldEnded = false
 
while (worldEnded !== true) {
  console.log("Keep on dancin' till the world ends")
}

Проблем можете решити на следећи начин:

let worldEnded = false
 
while (worldEnded !== true) {
  console.log("Keep on dancin' till the world ends")
  worldEnded = true
}

Отклањање грешака у бесконачним петљама и рекурзијама

Ако имате проблем са бесконачном петљом, морате да затворите картицу у Цхроме-у или Едге-у и затворите прозор прегледача у Фирефок-у. Након тога, морате пажљиво анализирати код. Ако не можете да пронађете проблем, вреди додати команду за отклањање грешака у вашу петљу или функцију и проверити вредности променљивих. Ако резултат не одговара очекиваном, онда га замењујемо, то се може лако урадити.

У горњем примеру, дебагер треба додати као први ред функције или петље. Затим морате да отворите картицу за отклањање грешака у Цхроме-у, анализирајући променљиве у опсегу. Користећи следеће дугме можете пратити њихове промене са сваком итерацијом. Све ово је лако урадити, а у већини случајева проблем се пронађе.

Више о свему овоме можете прочитати овде (за Цхроме) и овде (за Фирефок).

Синтаксна грешка

Једна од најчешћих грешака у ЈаваСцрипт-у је СинтакЕррор. Екстензије за уређивач текста ће вам помоћи да их избегнете. На пример, Брацкет Паир Цолоризер означава заграде у коду различитим бојама, а Преттиер или сличан алат за анализу омогућава брзо проналажење грешака. Најбоља опција за смањење вероватноће СинтаксЕррор је минимално угнежђење.

Поделите у коментарима: шта радите да бисте спречили грешке или их брзо открили и отклонили?

Скиллбок препоручује:

Извор: ввв.хабр.цом

Додај коментар