๐Ÿ’ซJavaScript | TypeError์™€ ์˜ต์…”๋„ ์ฒด์ด๋‹

dayannneยท2023๋…„ 10์›” 23์ผ
0
post-thumbnail

โœจ ๋ฌธ์ œ

API๋กœ ๊ฐ€์ ธ์˜จ ๊ฐ์ฒด ๋ฐ์ดํ„ฐ ๋‚ด ์ €์žฅ๋œ ์†์„ฑ์— ์ ‘๊ทผํ•˜๊ณ , ์ ‘๊ทผํ•œ ์†์„ฑ์— ํŠน์ • ๋ฉ”์„œ๋“œ๋ฅผ ์ ์šฉํ•  ๋•Œ๋งˆ๋‹ค ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณค ํ–ˆ๋‹ค.

์œ„ ์—๋Ÿฌ๋Š” ํ•ด๋‹น ์ฝ”๋“œ ๋‚ด productData.price.toLocaleString()์—์„œ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ๋‹ค. productData๋ผ๋Š” ๊ฐ์ฒด ๋‚ด price๋ผ๋Š” key์— ์ ‘๊ทผํ•œ ํ›„ ๊ฐ€์ ธ์˜จ value๋กœ toLocaleString()์„ ์ ์šฉํ•˜๋ ค ํ•  ๋•Œ ๋ฐœ์ƒํ•œ ์˜ค๋ฅ˜์ด๋‹ค.
(์ด์™ธ์—๋„ slice() ๋“ฑ ํŠน์ • ๋ฉ”์„œ๋“œ๋กœ ๊ฐ’์„ ์ฒ˜๋ฆฌํ•˜๋ ค ํ•  ๋•Œ์—๋„ ํ•ด๋‹น ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๋‹ค.)

ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์—๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํƒœ๊ทธ ์ตœ์ƒ๋‹จ์—์„œ &&์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ด ๋กœ๋”ฉ์ด ์™„๋ฃŒ ๋˜์—ˆ๊ณ (isLoading), ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•  ๋•Œ(productdata)์—๋งŒ ๋ Œ๋”๋ง ๋  ์ˆ˜ ์žˆ๋„๋ก ์ ์šฉ๋˜์–ด ์žˆ๋‹ค.
๊ทธ๋ž˜์„œ productData.product_name ๊ฐ™์€ ๋‹จ์ˆœ ์ ‘๊ทผ์—์„œ๋Š” ์ด์ƒ์ด ์—†์ง€๋งŒ ์ ‘๊ทผ ํ›„ toLocaleString() ๋ฉ”์„œ๋“œ ์ด์šฉ ์‹œ ์—๋Ÿฌ๊ฐ€ ๊ทธ๋Œ€๋กœ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

์ด๋ฏธ ์ƒ์œ„์— productData๊ฐ€ ์žˆ์„ ๋•Œ๋งŒ ์ฒ˜๋ฆฌ๋  ์ˆ˜ ์žˆ๋„๋ก ์ง€์ •ํ•ด ์ฃผ์—ˆ์Œ์—๋„ ์™œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฑธ๊นŒ?


์›์ธ

  • ์ผ๋‹จ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฐ€์žฅ ํฐ ์ด์œ ๋Š” productData ๊ฐ์ฒด ์ž์ฒด๋Š” ์กด์žฌํ•˜์ง€๋งŒ ๊ทธ ์•ˆ์˜ price ์†์„ฑ์ด ์—†์„ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • ์œ„์™€ ๊ฐ™์€ ์ฝ”๋“œ์—์„œ๋Š” ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•˜๋”๋ผ๋„ ๊ทธ ๊ฐ์ฒด์˜ ํŠน์ • ์†์„ฑ์ด ์กด์žฌํ•˜์ง€ ์•Š์„ ๋•Œ ํ•ด๋‹น ์†์„ฑ์— ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•˜๋ฉด undefined๋ฅผ ๋ฐ˜ํ™˜ํ•ด ์ค€๋‹ค.
    ํ•˜์ง€๋งŒ, ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ ค๊ณ  ํ•˜๋ฉด undefined๋‚˜ null์€ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— TypeError๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

ํ•ด๊ฒฐ๋ฐฉ๋ฒ• 1) && ์—ฐ์‚ฐ์ž ์ง์ ‘ ์ ์šฉํ•˜๊ธฐ

๋จผ์ € &&์—ฐ์‚ฐ์ž๋กœ price ์†์„ฑ๊นŒ์ง€ ์ง์ ‘ ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.
๋‹ค๋งŒ ์ด ๋ฐฉ๋ฒ•์˜ ๊ฒฝ์šฐ ๊ฐ์ฒด์˜ ์ค‘์ฒฉ์ด ๋” ๊นŠ์€ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ์ˆ˜๋ก &&์—ฐ์‚ฐ์ž๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ์ผ์ผ์ด ์ ์šฉํ•ด์•ผ ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.

ํ•ด๊ฒฐ๋ฐฉ๋ฒ• 2) - ์˜ต์…”๋„ ์ฒด์ด๋‹ ์—ฐ์‚ฐ์ž

&&์—ฐ์‚ฐ์ž ๋ณด๋‹ค ๋”์šฑ ๊ฐ„ํŽธํ•˜๊ณ  ์•ˆ์ „ํ•˜๊ฒŒ ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. ๋ฐ”๋กœ ์˜ต์…”๋„ ์ฒด์ด๋‹์ด๋‹ค.
์•„๋ž˜ ์ฝ”๋“œ์™€ ๊ฐ™์ด ์ ‘๊ทผํ•  ํ”„๋กœํผํ‹ฐ์— ์˜ต์…”๋„ ์ฒด์ด๋‹ ์—ฐ์‚ฐ์ž(?.)๋ฅผ ์‚ฌ์šฉํ•ด ์ฃผ๋ฉด ๋œ๋‹ค.

1) ?.๋ฅผ ํ‘œ์‹œํ•œ ์ขŒํ•ญ์˜ ๊ฐ’(์—ฌ๊ธฐ์„œ๋Š” productData.price)์ด null ๋˜๋Š” undefined์ธ ๊ฒฝ์šฐ, ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๊ณ  ์‹คํ–‰ ์ข…๋ฃŒ ํ›„ undefined๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
2) productData.price๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด (null ๋˜๋Š” undefined๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด), ๊ทธ ๋‹ค์Œ์— ์˜ค๋Š” .toLocaleString() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋œ๋‹ค.


๐Ÿ‘€ ์˜ต์…”๋„ ์ฒด์ด๋‹์ด๋ž€?

JavaScript์—์„œ ๊ฐ์ฒด์˜ ์ค‘์ฒฉ๋œ ์†์„ฑ์— ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•  ๋•Œ, ํ•ด๋‹น ์†์„ฑ์ด ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด undefined๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋Œ€์‹ ์— TypeError๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ES2020์—์„œ ๋„์ž…๋œ ๊ธฐ๋Šฅ์ด ๋ฐ”๋กœ '์˜ต์…”๋„ ์ฒด์ด๋‹' ์ด๋‹ค.

์ฆ‰, ๋‚ด๊ฐ€ ๋งŒ๋‚œ ์ € TypeError๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ•œ ๊ธฐ๋Šฅ์ด๋ผ๋Š” ๊ฒƒ๐ŸŒŸ

๊ฐ์ฒด์˜ ์†์„ฑ์„ ์ฝ์–ด์˜ค๋Š” ๊ณผ์ •์—์„œ ํ•ด๋‹น ๊ฐ’์ด undefined ๋˜๋Š” null์ผ ๊ฒฝ์šฐ, ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๊ณ  undefined ๋˜๋Š” null์„ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ์˜ ์•ˆ์ •์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์„ ์ง€๋‹ˆ๊ณ  ์žˆ๋‹ค.

ํ™œ์šฉ

  • ํ•จ์ˆ˜๋‚˜ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์—๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

    let user = {
    sayHello: function() {
     return 'Hello!';
    }
    };
    console.log(user.sayHello?.()); // Hello!
    
    let user = {};
    console.log(user.sayHello?.()); // undefined

    user.sayHello์กด์žฌํ•˜๋ฉด ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. user.sayHello๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด(undefined๋‚˜ null์ผ ๊ฒฝ์šฐ), ๋ฐ”๋กœ undefined๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  • ๋ฐฐ์—ด์—๋„ ์˜ต์…”๋„ ์ฒด์ด๋‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

    let value = arr?[index];

    ๋ฐฐ์—ด arr์ด ์กด์žฌํ•˜๋ฉด ํ•ด๋‹น ์ธ๋ฑ์Šค์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด(undefined๋‚˜ null์ผ ๊ฒฝ์šฐ), ๋ฐ”๋กœ undefined๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

ํŠน์ง•

  • ๊ฐ€์žฅ ์™ผ์ชฝ์˜ ํ‰๊ฐ€๋Œ€์ƒ์ธ ๋ณ€์ˆ˜๋Š” ๋ฐ˜๋“œ์‹œ ์„ ์–ธ ๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.(์œ„ ์˜ˆ์‹œ์—์„œ๋Š” productData)
    ๋ณ€์ˆ˜(productData)๊ฐ€ ์„ ์–ธ๋˜์–ด ์žˆ์ง€ ์•Š์„ ์‹œ ReferenceError๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์˜ต์…”๋„ ์ฒด์ด๋‹์€ ์™ผ์ชฝ ํ‰๊ฐ€๋Œ€์ƒ์— ๊ฐ’์ด ์—†์œผ๋ฉด(null ๋˜๋Š” undefined) ์ฆ‰์‹œ ํ‰๊ฐ€๋ฅผ ๋ฉˆ์ถ”๊ณ , ์•„๋ฌด ๋™์ž‘๋„ ์ผ์–ด๋‚˜์ง€ ์•Š๊ฒŒ ๋œ๋‹ค. (์ด๋ฅผ ๋‹จ๋ฝ ํ‰๊ฐ€ ๋ฐฉ๋ฒ•(short-circuit)์ด๋ผ๊ณ  ํ•œ๋‹ค)
  • ์˜ต์…”๋„ ์ฒด์ด๋‹ ์—ฐ์‚ฐ์ž๋Š” ์ขŒ๋ณ€์˜ ๊ฐ’์ด null ๋˜๋Š” undefined์ผ ๋•Œ๋งŒ ์ž‘๋™ํ•œ๋‹ค. ๋‹ค๋ฅธ 'falsy'ํ•œ ๊ฐ’๋“ค (false, 0, "", NaN ๋“ฑ)์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์ด๋Ÿฐ ๊ฒฝ์šฐ์—” ์ผ๋ฐ˜์ ์ธ ํ”„๋กœํผํ‹ฐ ์ ‘๊ทผ/ํ•จ์ˆ˜ ํ˜ธ์ถœ๊ณผ ๋™์ผํ•˜๊ฒŒ ์ž‘๋™ํ•œ๋‹ค.
  • ๋‚จ์šฉ ๊ธˆ์ง€ : ์กด์žฌํ•˜์ง€ ์•Š์•„๋„ ๊ดœ์ฐฎ์€ ๋Œ€์ƒ์—๋งŒ ์‚ฌ์šฉํ•  ๊ฒƒ
    ์œ„ ์˜ˆ์‹œ์—์„œ productData๋Š” ๋ฐ˜๋“œ์‹œ ์žˆ์–ด์•ผ ํ•˜๋Š”๋ฐ price๋Š” ํ•„์ˆ˜๊ฐ’์ด ์•„๋‹ˆ๋ฏ€๋กœ productData?.price?. ๋ณด๋‹ค๋Š” productData.price?. ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ๋ฐ”๋žŒ์งํ•œ ๋ฐฉ๋ฒ•์ด๋ฉฐ, productData?.price์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋ณ€์ˆ˜productData๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋”๋ผ๋„ ReferenceError ๋Œ€์‹  undefined๊ฐ€ ๋ฐ˜ํ™˜๋˜๊ณ  ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•„ ๋””๋ฒ„๊น…์ด ์–ด๋ ค์›Œ์งˆ ์ˆ˜ ์žˆ๋‹ค.
profile
โ˜๏ธ

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด