์ด๋Ÿฐ, ๋˜ ํ•ด๋ƒˆ์Šต๋‹ˆ๋‹ค: JavaScript์˜ ์ผ๋ฐ˜์ ์ธ ์˜ค๋ฅ˜ ๋””๋ฒ„๊น…

์ด๋Ÿฐ, ๋˜ ํ•ด๋ƒˆ์Šต๋‹ˆ๋‹ค: JavaScript์˜ ์ผ๋ฐ˜์ ์ธ ์˜ค๋ฅ˜ ๋””๋ฒ„๊น…

๋งŽ์€ ๊ฐœ๋ฐœ์ž๋“ค์ด ์ž˜ ์•Œ๊ณ  ์žˆ๋“ฏ์ด JavaScript ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์€ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋•Œ๋กœ๋Š” ์™„์ „ํžˆ ๊ฒ์ด ๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—…๋ฌด๋ฅผ ์ง„ํ–‰ํ•˜๋‹ค ๋ณด๋ฉด ํ•„์—ฐ์ ์œผ๋กœ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ , ๊ทธ ์ค‘ ์ผ๋ถ€๋Š” ์ž์ฃผ ๋ฐ˜๋ณต๋˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ์ดˆ๋ณด ๊ฐœ๋ฐœ์ž๋ฅผ ๋Œ€์ƒ์œผ๋กœ ์ž‘์„ฑ๋œ ์ด ๊ธฐ์‚ฌ์—์„œ๋Š” ์ด๋Ÿฌํ•œ ์˜ค๋ฅ˜์™€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๋ช…ํ™•์„ฑ์„ ์œ„ํ•ด ํ•จ์ˆ˜, ์†์„ฑ, ๊ฐ์ฒด์˜ ์ด๋ฆ„์€ ๋‹ค์Œ์—์„œ ๋”ฐ์™”์Šต๋‹ˆ๋‹ค. ์ธ๊ธฐ์žˆ๋Š” ๋…ธ๋ž˜. ์ด ๋ชจ๋“  ๊ฒƒ์€ ์ผ๋ฐ˜์ ์ธ ์‹ค์ˆ˜๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋น ๋ฅด๊ฒŒ ๊ธฐ์–ตํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

์•Œ๋ฆผ: "Habr"์˜ ๋ชจ๋“  ๋…์ž๋ฅผ ์œ„ํ•œ - "Habr" ํ”„๋กœ๋ชจ์…˜ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Skillbox ๊ณผ์ •์— ๋“ฑ๋กํ•  ๋•Œ 10 ๋ฃจ๋ธ” ํ• ์ธ.

Skillbox๋Š” ๋‹ค์Œ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์‹ค๊ธฐ ์ฝ”์Šค "๋ชจ๋ฐ”์ผ ๊ฐœ๋ฐœ์ž PRO".

TypeError: ์†์„ฑ์ด ์ •์˜๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

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)

์œ„์˜ ์˜ˆ์ œ ์ฝ”๋“œ์—์„œ๋Š” Uncaught TypeError: Cannot read property 'lucky' of undefed ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” girl ๊ฐœ์ฒด์— name ์†์„ฑ์ด ์žˆ์ง€๋งŒ ๋ช…๋ช…๋œ ์†์„ฑ์ด ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  girl.named ์†์„ฑ์€ ์ •์˜๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ณต์‹์ ์œผ๋กœ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ girl.named.lucky๋ฅผ girl.name์œผ๋กœ ๋ฐ”๊พธ๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ์ž‘๋™ํ•˜๊ณ  ํ”„๋กœ๊ทธ๋žจ์€ Lucky๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์†์„ฑ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ๋ฅผ ์ฝ์œผ์‹ญ์‹œ์˜ค..

TypeError๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•

TypeError๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ํŠน์ • ์œ ํ˜•๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด .bold() ์‚ฌ์šฉ, ์ •์˜๋˜์ง€ ์•Š์€ ์†์„ฑ ์š”์ฒญ, ์‹ค์ œ๋กœ ํ•จ์ˆ˜๊ฐ€ ์•„๋‹Œ ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ girl()์„ ํ˜ธ์ถœํ•˜๋ ค๊ณ  ํ•˜๋ฉด Uncaught TypeError: yourVariable.bold๋Š” ํ•จ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ฉฐ girl์€ ํ•จ์ˆ˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ํ•จ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ ํ˜ธ์ถœ๋˜๋Š” ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์˜ค๋ฅ˜๋ฅผ ์ œ๊ฑฐํ•˜๋ ค๋ฉด ๋ณ€์ˆ˜๋ฅผ ์—ฐ๊ตฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์—ฌ์ž๋ž€ ๋ฌด์—‡์ธ๊ฐ€? girl.name์ด ๋ญ์ฃ ? ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜๊ฑฐ๋‚˜, console.log, ๋””๋ฒ„๊ฑฐ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€์ˆ˜๋ฅผ ํ‘œ์‹œํ•˜๊ฑฐ๋‚˜, ์ฝ˜์†”์—์„œ ๋ณ€์ˆ˜ ์ด๋ฆ„์„ ํ˜ธ์ถœํ•˜์—ฌ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณ€์ˆ˜์— ํฌํ•จ๋œ ๋ฐ์ดํ„ฐ ์œ ํ˜•์— ๋Œ€ํ•ด ์—ฐ์‚ฐ์ด ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋งž์ง€ ์•Š์œผ๋ฉด ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ try..catch ๋ธ”๋ก์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋“ฑ ๋ณ€๊ฒฝํ•˜๊ณ  ์ž‘์—… ์‹คํ–‰์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ

Baby One More Time(Britney Spears์ž…๋‹ˆ๋‹ค)์ด๋ผ๋Š” ๋…ธ๋ž˜์˜ ๊ฐ€์‚ฌ ์ž‘์„ฑ์ž๋ฅผ ๋ฏฟ๋Š”๋‹ค๋ฉด, ์ด ๋ฌธ๋งฅ์—์„œ hit๋ผ๋Š” ๋‹จ์–ด๋Š” ๊ฐ€์ˆ˜๊ฐ€ ๋‹ค์‹œ ๋ถ€๋ฆ„์„ ๋ฐ›๊ณ ์ž ํ•˜๋Š” ์š•๊ตฌ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋…ธ๋ž˜ - ๋ฒˆ์—ญ๊ฐ€์˜ ๋ฉ”๋ชจ). ์ด๋Ÿฌํ•œ ์š•๊ตฌ๊ฐ€ ์‹ค์ œ ์ƒํ™œ์—์„œ์˜ ํ†ตํ™” ํšŸ์ˆ˜ ์ฆ๊ฐ€๋กœ ์ด์–ด์งˆ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์ด๋Š” ํ˜ธ์ถœ ์Šคํƒ์ด ์˜ค๋ฒ„ํ”Œ๋กœ๋˜๋ฉด ์˜ค๋ฅ˜๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋Š” ์žฌ๊ท€์ž…๋‹ˆ๋‹ค.

์˜ค๋ฅ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์˜ค๋ฅ˜: ์Šคํƒ ๊ณต๊ฐ„ ๋ถ€์กฑ(Edge)
๋‚ด๋ถ€ ์˜ค๋ฅ˜: ์žฌ๊ท€๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์Šต๋‹ˆ๋‹ค(Firefox)
RangeError: ์ตœ๋Œ€ ํ˜ธ์ถœ ์Šคํƒ ํฌ๊ธฐ๊ฐ€ ์ดˆ๊ณผ๋˜์—ˆ์Šต๋‹ˆ๋‹ค(Chrome).

๊ฐœ๋ฐœ์ž๊ฐ€ ์žฌ๊ท€์—์„œ ๊ธฐ๋ณธ ์‚ฌ๋ก€๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์ฝ”๋“œ๊ฐ€ ์˜๋„ํ•œ ์‚ฌ๋ก€๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

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

์ด ๊ฒฝ์šฐ stillBelieve๋Š” false๊ฐ€ ๋  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๋งค๋ฒˆ oneMoreTime์ด ํ˜ธ์ถœ๋˜์ง€๋งŒ ํ•จ์ˆ˜๋Š” ์™„๋ฃŒ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‘ ๋ช…์˜ ์นœ๊ตฌ์—๊ฒŒ ์˜์ง€ํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด ์™ธ๋กœ์›€์ด ์ค„์–ด๋“ค๊ณ  ์ „ํ™”๋ฅผ ๊ธฐ๋‹ค๋ฆด ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

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

์‹œ์Šคํ…œ์ด ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์ง€๋งŒ JavaScript ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ํŽ˜์ด์ง€๊ฐ€ ๋‹จ์ˆœํžˆ ์ •์ง€๋˜๋Š” ๋ฌดํ•œ ๋ฃจํ”„๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ์˜ˆ๋กœ ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” while ๋ฃจํ”„์— ์ข…๋ฃŒ ์กฐ๊ฑด์ด ์—†์„ ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

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
}

๋ฌดํ•œ ๋ฃจํ”„ ๋ฐ ์žฌ๊ท€ ๋””๋ฒ„๊น…

๋ฌดํ•œ ๋ฃจํ”„ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ Chrome์ด๋‚˜ Edge์—์„œ๋Š” ํƒญ์„ ๋‹ซ๊ณ  Firefox์—์„œ๋Š” ๋ธŒ๋ผ์šฐ์ € ์ฐฝ์„ ๋‹ซ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์ฃผ์˜ ๊นŠ๊ฒŒ ๋ถ„์„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค๋ฉด ๋ฃจํ”„๋‚˜ ํ•จ์ˆ˜์— ๋””๋ฒ„๊ฑฐ ๋ช…๋ น์„ ์ถ”๊ฐ€ํ•˜๊ณ  ๋ณ€์ˆ˜ ๊ฐ’์„ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ๊ฐ€ ์˜ˆ์ƒํ•œ ๊ฒฐ๊ณผ์™€ ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด ์ด๋ฅผ ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค. ์ด ์ž‘์—…์€ ์‰ฝ๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์œ„์˜ ์˜ˆ์—์„œ๋Š” ํ•จ์ˆ˜๋‚˜ ๋ฃจํ”„์˜ ์ฒซ ๋ฒˆ์งธ ์ค„์— ๋””๋ฒ„๊ฑฐ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ Chrome์—์„œ ๋””๋ฒ„๊ทธ ํƒญ์„ ์—ด๊ณ  ๋ฒ”์œ„ ๋‚ด ๋ณ€์ˆ˜๋ฅผ ๋ถ„์„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ๋ฒ„ํŠผ์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ ๋ฐ˜๋ณต๋งˆ๋‹ค ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ถ”์ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ชจ๋“  ์ž‘์—…์€ ์‰ฝ๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ๊ฒฌ๋ฉ๋‹ˆ๋‹ค.

์ด ๋ชจ๋“  ๊ฒƒ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์—ฌ๊ธฐ์—์„œ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(ํฌ๋กฌ์šฉ) ๊ทธ๋ฆฌ๊ณ  ์—ฌ๊ธฐ (ํŒŒ์ด์–ดํญ์Šค์šฉ).

๊ตฌ๋ฌธ ์˜ค๋ฅ˜

JavaScript์—์„œ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์˜ค๋ฅ˜ ์ค‘ ํ•˜๋‚˜๋Š” SyntaxError์ž…๋‹ˆ๋‹ค. ํ…์ŠคํŠธ ํŽธ์ง‘๊ธฐ ํ™•์žฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Bracket pair Colorizer๋Š” ์ฝ”๋“œ์˜ ๊ด„ํ˜ธ๋ฅผ ๋‹ค์–‘ํ•œ ์ƒ‰์ƒ์œผ๋กœ ํ‘œ์‹œํ•˜๊ณ  Prettier ๋˜๋Š” ์œ ์‚ฌํ•œ ๋ถ„์„ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์˜ค๋ฅ˜๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. SyntaxError์˜ ๊ฐ€๋Šฅ์„ฑ์„ ์ค„์ด๋Š” ๊ฐ€์žฅ ์ข‹์€ ์˜ต์…˜์€ ์ตœ์†Œํ•œ์˜ ์ค‘์ฒฉ์ž…๋‹ˆ๋‹ค.

๋Œ“๊ธ€๋กœ ๊ณต์œ ํ•ด์ฃผ์„ธ์š”: ์‹ค์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ฑฐ๋‚˜ ์‹ ์†ํ•˜๊ฒŒ ๊ฐ์ง€ํ•˜๊ณ  ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฌด์—‡์„ ํ•˜์‹œ๋‚˜์š”?

Skillbox๋Š” ๋‹ค์Œ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€