Wps, fe wnes i eto: Dadfygio gwallau cyffredin yn JavaScript

Wps, fe wnes i eto: Dadfygio gwallau cyffredin yn JavaScript

Gall ysgrifennu cod JavaScript fod yn heriol ac weithiau'n frawychus iawn, fel y mae llawer o ddatblygwyr yn gyfarwydd ag ef. Yn y broses waith, mae'n anochel bod gwallau'n codi, ac mae rhai ohonynt yn cael eu hailadrodd yn aml. Mae'r erthygl hon, sydd wedi'i hanelu at ddatblygwyr newydd, yn sôn am y gwallau hyn a sut i'w datrys. Er mwyn eglurder, cymerir enwau swyddogaethau, priodweddau a gwrthrychau o cân boblogaidd. Mae hyn i gyd yn eich helpu i gofio'n gyflym sut i gywiro camgymeriadau cyffredin.

Rydym yn atgoffa: i holl ddarllenwyr "Habr" - gostyngiad o 10 rubles wrth gofrestru ar unrhyw gwrs Skillbox gan ddefnyddio'r cod hyrwyddo "Habr".

Mae Skillsbox yn argymell: Cwrs ymarferol "Datblygwr Symudol PRO".

TypeError: nid yw'r eiddo wedi'i ddiffinio

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)

Mae'r cod enghreifftiol uchod yn taflu'r gwall Heb ei ddal TypeError: Methu darllen priodwedd 'lwcus' o heb ei ddiffinio. Y broblem yw nad oes gan y gwrthrych merch briodwedd a enwir, er bod ganddo briodwedd enw. A chan nad yw'r eiddo girl.named wedi'i ddiffinio, ni allwch gael mynediad iddo, oherwydd yn ffurfiol nid yw'n bodoli. Ond os byddwch chi'n disodli girl.named.lucky gyda girl.name, yna bydd popeth yn gweithio a bydd y rhaglen yn dychwelyd Lucky.

Gallwch ddysgu mwy am yr eiddo darllenwch yma.

Sut i ddatrys Gwallau Math

Mae Gwallau Math yn digwydd pan fydd rhaglennydd yn ceisio cyflawni gweithredoedd ar ddata nad ydynt yn cyfateb i fath penodol. Mae enghreifftiau'n cynnwys defnyddio .bold(), gofyn am briodwedd heb ei ddiffinio, neu alw swyddogaeth nad yw'n swyddogaeth mewn gwirionedd.

Felly, os ceisiwch ffonio girl(), byddwch yn cael y gwall Uncaught TypeError: nid yw yourVariable.bold yn swyddogaeth ac nid yw merch yn swyddogaeth, oherwydd gwrthrych sy'n cael ei alw ydyw mewn gwirionedd, nid swyddogaeth.

Er mwyn dileu gwallau, mae angen i chi astudio'r newidynnau. Felly, beth yw merch? Beth yw girl.named? Gallwch ddarganfod trwy ddadansoddi'r cod, arddangos newidynnau gan ddefnyddio console.log, y gorchymyn dadfygiwr, neu alw'r enw newidyn yn y consol. Mae angen i chi wneud yn siŵr ei bod hi'n bosibl gweithredu ar y math o ddata sydd yn y newidyn. Os nad yw'n ffitio, newidiwch ef, er enghraifft, ychwanegwch amod neu ceisiwch..dal bloc - a chael rheolaeth dros gyflawni'r llawdriniaeth.

Gorlif pentwr

Os ydych chi'n credu bod awduron geiriau'r gân Baby One More Time (dyma Britney Spears, ie), yna mae'r gair taro yn y cyd-destun hwn yn golygu awydd y canwr i gael ei alw eto (dyma esboniad o union gyd-destun y can - nodyn cyfieithydd). Mae’n bosibl iawn y bydd yr awydd hwn yn arwain at gynnydd yn nifer y galwadau mewn bywyd go iawn. Ond mewn rhaglennu, mae hwn yn ailadroddiad a all achosi gwall os yw'r pentwr galwadau yn gorlifo.

Mae'r gwallau'n edrych fel hyn:

Gwall: Gofod y tu allan i'r pentwr (Ymyl)
Gwall Mewnol: gormod o ailadrodd (Firefox)
Gwall Ystod: Rhagorwyd ar uchafswm maint y stac galwadau (Chrome)

Mae gorlif pentwr yn digwydd os nad yw'r datblygwr yn ystyried yr achos sylfaenol yn y dychweliad, neu os nad yw'r cod yn mynd i'r afael â'r achos arfaethedig.

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

Yn yr achos hwn, ni all stillBelieve byth fod yn ffug, felly bydd oneMoreTime yn cael ei alw bob tro, ond ni fydd y swyddogaeth byth yn gyflawn.

Os dechreuwch ddibynnu ar ddau ffrind, bydd hyn yn lleihau unigrwydd, ac ni fydd yn rhaid i chi aros am alwad.

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

Enghraifft yw achosion gyda dolenni anfeidrol, pan nad yw'r system yn cynhyrchu neges gwall, ond mae'r dudalen lle mae'r cod JavaScript yn cael ei weithredu yn rhewi. Mae hyn yn digwydd os nad oes gan y ddolen tra amod terfynu.

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

Gallwch chi ddatrys y broblem fel a ganlyn:

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

Dadfygio dolenni anfeidrol a dychweliadau

Os oes gennych broblem dolen ddiddiwedd, mae angen i chi gau'r tab yn Chrome neu Edge, a chau ffenestr y porwr yn Firefox. Ar ôl hyn, mae angen i chi ddadansoddi'r cod yn ofalus. Os na allwch ddod o hyd i'r broblem, mae'n werth ychwanegu gorchymyn dadfygiwr i'ch dolen neu swyddogaeth a gwirio gwerthoedd y newidynnau. Os nad yw'r canlyniad yn cyfateb i'r disgwyl, yna rydym yn ei ddisodli, gellir gwneud hyn yn hawdd.

Yn yr enghraifft uchod, dylid ychwanegu dadfygiwr fel llinell gyntaf y swyddogaeth neu'r ddolen. Yna mae angen ichi agor y tab dadfygio yn Chrome, gan ddadansoddi'r newidynnau yn y cwmpas. Gan ddefnyddio'r botwm nesaf gallwch olrhain eu newidiadau ym mhob iteriad. Mae hyn i gyd yn hawdd i'w wneud, ac yn y rhan fwyaf o achosion darganfyddir y broblem.

Gallwch ddarllen mwy am hyn i gyd yma (ar gyfer crôm) ac yma (ar gyfer Firefox).

Gwall cystrawen

Un o'r gwallau mwyaf cyffredin yn JavaScript yw SyntaxError. Bydd estyniadau golygydd testun yn eich helpu i'w hosgoi. Er enghraifft, mae Bracket Pair Colorizer yn marcio cromfachau yn y cod gyda gwahanol liwiau, ac mae Prettier neu offeryn dadansoddi tebyg yn ei gwneud hi'n bosibl dod o hyd i wallau yn gyflym. Yr opsiwn gorau i leihau'r tebygolrwydd o Gwall Cystrawen yw ychydig iawn o nythu.

Rhannwch y sylwadau: beth ydych chi'n ei wneud i atal camgymeriadau neu eu canfod a'u dileu yn gyflym?

Mae Skillsbox yn argymell:

Ffynhonnell: hab.com

Ychwanegu sylw