Oops, Kuv tau ua nws dua: Debugging ib qho yuam kev hauv JavaScript

Oops, Kuv tau ua nws dua: Debugging ib qho yuam kev hauv JavaScript

Kev sau JavaScript code tuaj yeem nyuaj thiab qee zaum tsis txaus ntshai, raws li ntau tus neeg tsim khoom paub txog. Nyob rau hauv cov txheej txheem ntawm kev ua hauj lwm, yuam kev inevitably tshwm sim, thiab ib co ntawm lawv rov qab ntau zaus. Kab lus no, tsom rau cov neeg tsim tawm tshiab, tham txog cov kev ua yuam kev no thiab yuav daws lawv li cas. Txhawm rau kom pom tseeb, cov npe ntawm cov haujlwm, cov khoom thiab cov khoom raug coj los ntawm nkauj nrov. Tag nrho cov no yuav pab koj nco ntsoov yuav ua li cas kho tej yam yuam kev.

Peb nco qab: rau txhua tus neeg nyeem Habr - 10 ruble luv nqi thaum tso npe rau hauv ib chav kawm Skillbox siv Habr promo code.

Skillbox pom zoo: Cov chav kawm siv tau "Mobile Developer PRO".

TypeError: Cov cuab yeej tsis tau txhais

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)

Cov piv txwv code saum toj no cuam tshuam qhov yuam kev Uncaught TypeError: Tsis tuaj yeem nyeem cov cuab yeej 'muaj hmoo' ntawm undefined. Qhov teeb meem yog tias tus ntxhais khoom tsis muaj lub npe khoom, txawm tias nws muaj lub npe khoom. Thiab txij li cov khoom ntiag tug girl.named tsis tau txhais, koj tsis tuaj yeem nkag mus rau nws, vim tias nws tsis muaj nyob. Tab sis yog tias koj hloov girl.named.lucky nrog girl.name, ces txhua yam yuav ua haujlwm thiab qhov kev pab cuam yuav rov qab Lucky.

Koj tuaj yeem kawm paub ntau ntxiv txog cov khoom nyeem ntawm no.

Yuav daws TypeErrors li cas

TypeErrors tshwm sim thaum tus programmer sim ua cov yeeb yam ntawm cov ntaub ntawv uas tsis phim ib hom tshwj xeeb. Piv txwv suav nrog kev siv .bold(), nug txog cov cuab yeej uas tsis tau teev tseg, lossis hu rau lub luag haujlwm uas tsis yog lub luag haujlwm tiag tiag.

Yog li, yog tias koj sim hu rau tus ntxhais (), koj yuav tau txais qhov yuam kev Uncaught TypeError: yourVariable.bold tsis muaj nuj nqi thiab tus ntxhais tsis muaj nuj nqi, vim tias nws yog qhov khoom hu ua, tsis muaj nuj nqi.

Txhawm rau tshem tawm qhov yuam kev, koj yuav tsum kawm txog qhov hloov pauv. Yog li ntawd, tus ntxhais yog dab tsi? yog girl.named? Koj tuaj yeem tshawb pom los ntawm kev txheeb xyuas cov cai, tso tawm qhov hloov pauv siv console.log, cov lus txib debugger, lossis hu rau lub npe sib txawv hauv lub console. Koj yuav tsum xyuas kom meej tias nws muaj peev xwm ua haujlwm ntawm cov ntaub ntawv hom muaj nyob rau hauv qhov sib txawv. Yog tias nws tsis haum, hloov nws, piv txwv li, ntxiv ib qho mob lossis sim..catch thaiv - thiab tau txais kev tswj hwm ntawm kev ua haujlwm.

Txheej Overflow

Yog tias koj ntseeg tias cov neeg sau cov nkauj rau zaj nkauj Baby One More Time (qhov no yog Britney Spears, yog lawm), ces lo lus ntaus hauv cov ntsiab lus no txhais tau hais tias tus neeg hu nkauj lub siab xav hu dua (ntawm no yog ib qho kev piav qhia ntawm lub ntsiab lus ntawm lub ntsiab lus. nkauj - tus txhais lus). Nws yuav zoo yog tias qhov kev ntshaw no yuav ua rau muaj kev hu xov tooj ntau ntxiv hauv lub neej tiag tiag. Tab sis hauv kev ua haujlwm, qhov no yog qhov rov ua dua uas tuaj yeem ua rau muaj kev ua yuam kev yog tias hu rau pawg overflows.

Qhov yuam kev zoo li no:

yuam kev: Tawm ntawm qhov chaw pawg (Edge)
InternalError: ntau dhau rov qab (Firefox)
RangeError: Ntau tshaj qhov hu ua pawg loj tshaj (Chrome)

Ib pawg overflow tshwm sim yog tias tus tsim tawm tsis xav txog lub hauv paus rooj plaub hauv kev rov ua dua, lossis yog tias tus lej tsis hais txog qhov xwm txheej xav tau.

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

Nyob rau hauv rooj plaub no, stillBelieve yeej tsis muaj tseeb, yog li oneMoreTime yuav raug hu txhua zaus, tab sis cov haujlwm yuav tsis ua tiav.

Yog tias koj pib tso siab rau ob tus phooj ywg, qhov no yuav txo qis kev kho siab, thiab koj yuav tsis tas tos hu.

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

Ib qho piv txwv yog cov xwm txheej uas tsis muaj qhov kawg, thaum lub kaw lus tsis tsim cov lus yuam kev, tab sis nplooj ntawv ntawm JavaScript code raug tua tsuas yog khov. Qhov no tshwm sim yog thaum lub voj voog tsis muaj qhov kev txiav tawm.

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

Koj tuaj yeem daws qhov teeb meem raws li hauv qab no:

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

Debugging infinite loops thiab recursions

Yog tias koj muaj qhov teeb meem tsis kawg, koj yuav tsum kaw lub tab hauv Chrome lossis Edge, thiab kaw qhov browser qhov rai hauv Firefox. Tom qab no, koj yuav tsum ua tib zoo txheeb xyuas cov cai. Yog tias koj tsis tuaj yeem pom qhov teeb meem, nws tsim nyog ntxiv cov lus txib debugger rau koj lub voj lossis kev ua haujlwm thiab xyuas cov txiaj ntsig ntawm qhov sib txawv. Yog tias qhov tshwm sim tsis sib haum rau qhov xav tau, ces peb hloov nws, qhov no tuaj yeem ua tau yooj yim.

Hauv qhov piv txwv saum toj no, debugger yuav tsum tau ntxiv ua thawj kab ntawm kev ua haujlwm lossis lub voj. Tom qab ntawd koj yuav tsum qhib qhov debug tab hauv Chrome, txheeb xyuas qhov hloov pauv hauv qhov ntsuas. Siv lub pob tom ntej koj tuaj yeem taug qab lawv cov kev hloov pauv ntawm txhua qhov iteration. Tag nrho cov no yog qhov yooj yim ua, thiab feem ntau qhov teeb meem tau pom.

Koj tuaj yeem nyeem ntxiv txog txhua yam ntawm no (rau Chrome) thiab ntawm no (rau Firefox).

Syntax yuam kev

Ib qho yuam kev feem ntau hauv JavaScript yog SyntaxError. Text editor extensions yuav pab koj zam lawv. Piv txwv li, Bracket Pair Colorizer cim cov cim hauv cov lej nrog cov xim sib txawv, thiab Prettier lossis cov cuab yeej tshuaj ntsuam zoo sib xws ua rau nws tuaj yeem nrhiav tau sai sai. Qhov kev xaiv zoo tshaj plaws los txo qhov yuav tshwm sim ntawm SyntaxError yog qhov tsawg kawg nkaus.

Qhia tawm hauv cov lus: koj ua dab tsi los tiv thaiv kev ua yuam kev lossis sai sai thiab tshem tawm lawv?

Skillbox pom zoo:

Tau qhov twg los: www.hab.com

Ntxiv ib saib