Oops, nanao izany indray aho: Debugging lesoka mahazatra amin'ny JavaScript

Oops, nanao izany indray aho: Debugging lesoka mahazatra amin'ny JavaScript

Ny fanoratana kaody JavaScript dia mety ho sarotra ary indraindray tena mampatahotra, araka ny fantatry ny mpamorona maro. Eo amin'ny dingan'ny asa dia tsy maintsy mipoitra ny fahadisoana, ary ny sasany amin'izy ireo dia miverimberina matetika. Ity lahatsoratra ity, mikendry ny mpamorona vaovao, dia miresaka momba ireo fahadisoana ireo sy ny fomba hamahana azy ireo. Mba hanazavana, ny anaran'ny asa, ny fananana ary ny zavatra dia nalaina avy amin'ny hira malaza. Izany rehetra izany dia manampy anao hahatsiaro haingana ny fomba hanitsiana ny fahadisoana mahazatra.

Mampahatsiahy izahay: ho an'ny mpamaky rehetra ny "Habr" - fihenam-bidy 10 roubles rehefa misoratra anarana amin'ny taranja Skillbox rehetra mampiasa ny code promotional "Habr".

Skillbox dia manoro hevitra: Mazava ho azy "Mobile Developer PRO".

TypeError: tsy voafaritra ny fananana

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)

Ny kaody ohatra etsy ambony dia manipy ny fahadisoana Uncaught TypeError: Tsy afaka mamaky ny fananana 'tsara vintana' amin'ny tsy voafaritra. Ny olana dia tsy manana fananana anarana ilay tovovavy, na dia manana fananana anarana aza. Ary satria tsy voafaritra ilay tovovavy. nomena anarana, dia tsy azonao idirana izany, satria tsy misy izany amin'ny fomba ofisialy. Fa raha soloinao girl.named.lucky amin'ny girl.name, dia handeha ny zava-drehetra ary hiverina ny programa Lucky.

Afaka mianatra bebe kokoa momba ireo fananana ianao vakio ato.

Ahoana ny fomba hamahana ny TypeErrors

Mitranga ny TypeErrors rehefa manandrana manao hetsika amin'ny angona tsy mifanaraka amin'ny karazana manokana ny programmer. Ohatra amin'izany ny fampiasana .bold(), fangatahana fananana tsy voafaritra, na fiantsoana asa izay tsy tena asa.

Noho izany, raha manandrana miantso tovovavy ianao (), dia hahazo ny fahadisoana Uncaught TypeError: yourVariable.bold dia tsy fiasa ary ny tovovavy dia tsy asa, satria zavatra antsoina izy io, fa tsy fiasa.

Mba hanafoanana ny fahadisoana dia mila mianatra ny fari-piainana ianao. Inona Γ ry no atao hoe tovovavy? Inona no atao hoe girl.name? Azonao atao ny mahita izany amin'ny alΓ lan'ny famakafakana ny kaody, ny fampisehoana ny fari-piainana mampiasa console.log, ny baiko debugger, na ny fiantsoana ny anarana miovaova ao amin'ny console. Mila mahazo antoka ianao fa azo atao ny miasa amin'ny karazana data voarakitra ao amin'ny fari-piainana. Raha tsy mety dia ovay, ohatra, asio fepetra na andramo..catch block - ary mahazo fifehezana ny fanatanterahana ny fandidiana.

Fisondrotana

Raha mino ny mpanoratra ny tonon'ilay hira Baby One More Time ianao (Britney Spears ity, eny), dia ny teny hoe voa amin'ity contexte ity dia midika hoe fanirian'ilay mpihira ny hiantsoana azy indray (indro misy fanazavana momba ny contexte mihitsy. hira - naotin'ny mpandika teny). Mety hitarika ho amin'ny fitomboan'ny isan'ny antso amin'ny tena fiainana izany faniriana izany. Fa amin'ny fandaharana, izany dia recursion izay mety hiteraka hadisoana raha toa ka mihoatry ny antso stack.

Toy izao ny fahadisoana:

Hadisoana: Lany toerana misy stack (Edge)
Internal Error: recursion be loatra (Firefox)
RangeError: Nihoatra ny haben'ny tobin'ny antso (Chrome)

Mitranga ny fihoaram-pefy raha toa ka tsy mandinika ny tranga fototra ao amin'ny recursion ny mpamorona, na raha tsy miresaka amin'ilay tranga nokasaina ilay kaody.

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

Amin'ity tranga ity, ny stillBelieve dia tsy mety ho diso mihitsy, ka ny oneMoreTime dia hantsoina isaky ny mandeha, fa ny fiasa dia tsy ho vita mihitsy.

Raha manomboka miantehitra amin'ny namana roa ianao, dia hampihena ny fanirery izany, ary tsy mila miandry antso ianao.

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

Ohatra iray ny tranga misy tadivavarana tsy manam-petra, rehefa tsy mamoaka hafatra diso ny rafitra, fa ny pejy izay anaovana ny code JavaScript dia mivaingana fotsiny. Mitranga izany raha tsy manana fepetra famaranana ny loop while.

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

Azonao atao ny mamaha ny olana toy izao manaraka izao:

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

Debugging tadivavarana tsy manam-petra sy recursions

Raha manana olana tsy manam-petra ianao dia mila manidy ny tabilao ao amin'ny Chrome na Edge, ary manakatona ny varavarankelin'ny navigateur ao amin'ny Firefox. Aorian'izany dia mila mandinika tsara ny code ianao. Raha tsy hitanao ny olana dia mendrika ny manampy baiko debugger amin'ny tadivavaranao na ny asanao ary manamarina ny sandan'ny variables. Raha toa ka tsy mifanaraka amin'ny zavatra nantenaina ny vokatra dia soloinay izany, azo atao mora foana izany.

Ao amin'ny ohatra etsy ambony, ny debugger dia tokony ampiana ho andalana voalohany amin'ny fiasa na loop. Avy eo dia mila manokatra ny tabilao debug ao amin'ny Chrome ianao, mamakafaka ireo fari-pahalalana amin'ny sehatra. Amin'ny fampiasana ny bokotra manaraka dia azonao atao ny manara-maso ny fiovan'izy ireo isaky ny mandeha. Izany rehetra izany dia mora atao, ary amin'ny ankamaroan'ny tranga dia hita ny olana.

Afaka mamaky bebe kokoa momba izany rehetra izany ianao eto (ho an'ny chrome) ary eto (ho an'ny Firefox).

Error syntax

Ny iray amin'ireo fahadisoana mahazatra indrindra amin'ny JavaScript dia SyntaxError. Ny fanitarana tonian-dahatsoratra dia hanampy anao hisoroka azy ireo. Ohatra, ny Bracket Pair Colorizer dia manamarika ny bracket ao amin'ny kaody miaraka amin'ny loko samihafa, ary Prettier na fitaovana famakafakana mitovy amin'izany dia ahafahana mahita haingana ny fahadisoana. Ny safidy tsara indrindra hampihenana ny mety hisian'ny SyntaxError dia ny fanatobiana kely.

Zarao amin'ny fanehoan-kevitra: inona no ataonao mba hisorohana ny fahadisoana na hamantatra haingana sy hanafoanana azy ireo?

Skillbox dia manoro hevitra:

Source: www.habr.com

Add a comment