Lo, nilifanya tena: Kutatua makosa ya kawaida katika JavaScript

Lo, nilifanya tena: Kutatua makosa ya kawaida katika JavaScript

Kuandika msimbo wa JavaScript inaweza kuwa changamoto na wakati mwingine kutisha kabisa, kama wasanidi wengi wanaifahamu. Katika mchakato wa kazi, makosa hutokea bila shaka, na baadhi yao hurudiwa mara kwa mara. Nakala hii, inayolenga watengenezaji wa novice, inazungumza juu ya makosa haya na jinsi ya kuyatatua. Kwa uwazi, majina ya kazi, mali na vitu huchukuliwa kutoka wimbo maarufu. Yote hii inakusaidia kukumbuka haraka jinsi ya kurekebisha makosa ya kawaida.

Tunakukumbusha: kwa wasomaji wote wa "Habr" - punguzo la rubles 10 wakati wa kujiandikisha katika kozi yoyote ya Skillbox kwa kutumia msimbo wa uendelezaji wa "Habr".

Skillbox inapendekeza: Kozi ya vitendo "Pro ya Msanidi Programu wa Simu".

TypeError: mali haijafafanuliwa

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)

Nambari ya mfano hapo juu inatupa hitilafu ya Uncaught TypeError: Haiwezi kusoma mali 'bahati' ya kutofafanuliwa. Shida ni kwamba kitu cha msichana hakina mali iliyopewa jina, ingawa kina mali ya jina. Na kwa kuwa mali ya msichana.jina haijafafanuliwa, huwezi kuipata, kwa sababu haipo rasmi. Lakini ukibadilisha girl.named.lucky na girl.name, basi kila kitu kitafanya kazi na mpango utarudi Lucky.

Unaweza kujifunza zaidi kuhusu mali soma hapa.

Jinsi ya kutatua TypeErrors

Hitilafu za Aina hutokea wakati programu inapojaribu kutekeleza vitendo kwenye data ambayo hailingani na aina mahususi. Mifano ni pamoja na kutumia .bold(), kuuliza sifa isiyobainishwa, au kupiga simu ya chaguo za kukokotoa ambayo si chaguo la kukokotoa.

Kwa hivyo, ukijaribu kumwita girl(), utapata hitilafu ya Uncaught TypeError: yourVariable.bold sio chaguo la kukokotoa na msichana si chaguo la kukokotoa, kwa sababu ni kitu kinachoitwa, si chaguo la kukokotoa.

Ili kuondokana na makosa, unahitaji kujifunza vigezo. Kwa hiyo, msichana ni nini? Msichana.anaitwa nani? Unaweza kujua kwa kuchanganua msimbo, kuonyesha vigeu kwa kutumia console.log, amri ya kitatuzi, au kuita jina la kutofautiana kwenye kiweko. Unahitaji kuhakikisha kuwa inawezekana kufanya kazi kwenye aina ya data iliyomo katika kutofautisha. Ikiwa haifai, ibadilishe, kwa mfano, ongeza hali au jaribu..kamata kizuizi - na upate udhibiti wa utekelezaji wa operesheni.

Stack kufurika

Ikiwa unaamini watunzi wa nyimbo za wimbo Baby One More Time (hii ni Britney Spears, ndio), basi neno hit katika muktadha huu linamaanisha hamu ya mwimbaji kuitwa tena (hapa kuna maelezo ya muktadha wa wimbo huu. wimbo - noti ya mtafsiri). Inaweza kuwa kwamba tamaa hii itasababisha ongezeko la idadi ya simu katika maisha halisi. Lakini katika upangaji programu, hii ni marudio ambayo inaweza kusababisha hitilafu ikiwa rundo la simu litafurika.

Makosa yanaonekana kama hii:

Hitilafu: Nafasi ya rafu imekwisha (Edge)
Hitilafu ya Ndani: kujirudia sana (Firefox)
Hitilafu ya Masafa: Upeo wa ukubwa wa rafu ya simu umepitwa (Chrome)

Kufurika kwa rafu hutokea ikiwa msanidi hazingatii kesi ya msingi katika urejeshaji, au ikiwa msimbo hauangazii kesi iliyokusudiwa.

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

Katika kesi hii, stillBelieve haiwezi kamwe kuwa uongo, kwa hivyo OneMoreTime itaitwa kila wakati, lakini chaguo la kukokotoa halitakamilika.

Ikiwa unapoanza kutegemea marafiki wawili, hii itapunguza upweke, na hutahitaji kusubiri simu.

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

Mfano ni kesi zilizo na vitanzi visivyo na mwisho, wakati mfumo hautoi ujumbe wa makosa, lakini ukurasa ambao msimbo wa JavaScript unatekelezwa hufungia tu. Hii hutokea ikiwa kitanzi cha wakati hakina hali ya kusitisha.

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

Unaweza kutatua tatizo kama ifuatavyo:

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

Utatuzi wa vitanzi na marudio yasiyo na kikomo

Ikiwa una shida ya kitanzi isiyo na kipimo, unahitaji kufunga kichupo kwenye Chrome au Edge, na ufunge dirisha la kivinjari kwenye Firefox. Baada ya hayo, unahitaji kuchambua kwa uangalifu kanuni. Ikiwa huwezi kupata shida, inafaa kuongeza amri ya debugger kwenye kitanzi chako au kazi na kuangalia maadili ya anuwai. Ikiwa matokeo hayalingani na kile kilichotarajiwa, basi tunaibadilisha, hii inaweza kufanywa kwa urahisi.

Katika mfano ulio hapo juu, kitatuzi kinapaswa kuongezwa kama safu ya kwanza ya chaguo za kukokotoa au kitanzi. Kisha unahitaji kufungua kichupo cha utatuzi kwenye Chrome, ukichambua anuwai katika wigo. Kwa kutumia kitufe kinachofuata unaweza kufuatilia mabadiliko yao katika kila marudio. Yote hii ni rahisi kufanya, na katika hali nyingi tatizo linapatikana.

Unaweza kusoma zaidi juu ya haya yote hapa (kwa chrome) na hapa (kwa Firefox).

Hitilafu ya kisintaksia

Moja ya makosa ya kawaida katika JavaScript ni SyntaxError. Viendelezi vya kuhariri maandishi vitakusaidia kuviepuka. Kwa mfano, Bracket Pair Colorizer huweka alama kwenye mabano katika msimbo yenye rangi tofauti, na Prettier au zana sawa ya uchanganuzi huwezesha kupata hitilafu kwa haraka. Chaguo bora ya kupunguza uwezekano wa SyntaxError ni nesting ndogo.

Shiriki katika maoni: unafanya nini ili kuzuia makosa au kugundua haraka na kuwaondoa?

Skillbox inapendekeza:

Chanzo: mapenzi.com

Kuongeza maoni