์˜ต์…”๋„ ์ฒด์ด๋‹ ?.

2025. 8. 29. 16:46ใ†Front-end/JavaScript

๋ฐ˜์‘ํ˜•

๋ชฉ์ฐจ

1. ์˜ต์…”๋„ ์ฒด์ด๋‹ ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ

2. ์˜ต์…”๋„ ์ฒด์ด๋‹ ?.

3. ?.()   ?.[]

    3-1. ๊ฐ์ฒด ๋‚ด ํ•จ์ˆ˜์˜ ์กด์žฌ ์—ฌ๋ถ€ ํ™•์ธ

    3-2. ๊ฐ์ฒด ๋‚ด ํ”„๋กœํผํ‹ฐ์˜ ์กด์žฌ ์—ฌ๋ถ€ ํ™•์ธ

 


1. ์˜ต์…”๋„ ์ฒด์ด๋‹ ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ

์‚ฌ์šฉ์ž ์ค‘ ์–ด๋–ค ์‚ฌ๋žŒ๋“ค์€ ์ฃผ์†Œ๋ฅผ ๋“ฑ๋กํ•˜๊ณ  ์‹ถ์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค.

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

let bang = {};
console.log(bang.address.street);	// TypeError: Cannot read property 'address' of undefined

 

?. ์ด ์ถ”๊ฐ€๋˜๊ธฐ ์ด์ „์—๋Š” && ์—ฐ์‚ฐ์ž๋ฅผ ํ™œ์šฉํ–ˆ์—ˆ๋‹ค.

let bang = {};
console.log(bang && bang.address);	// undefined

ํ•˜์ง€๋งŒ ์ค‘์ฒฉ ๊ฐ์ฒด์—์„œ ์ด๋ ‡๊ฒŒ AND ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ์•„์ฃผ ๊ธธ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค.

 

 

๋˜ ๋‹ค๋ฅธ ์˜ˆ์‹œ๋กœ JS๋กœ ํŽ˜์ด์ง€์— ์กด์žฌ ํ•˜์ง€ ์•Š๋Š” ์š”์†Œ์— ์ ‘๊ทผํ•  ๋•Œ์˜ ๋ฌธ์ œ๋„ ์žˆ๋‹ค.

let element = document.querySelector('.my_element').innerHTML;

 

 


2. ์˜ต์…”๋„ ์ฒด์ด๋‹ ?.

?. ์˜ '์•ž'์˜ ํ‰๊ฐ€ ๋Œ€์ƒ์ด undefined๋‚˜ null์ด๋ฉด ํ‰๊ฐ€๋ฅผ ๋ฉˆ์ถ”๊ณ  undefined๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๊ทธ ์™ธ์˜ ์ƒํ™ฉ์—์„œ๋Š” ๊ทธ ์กด์žฌํ•˜๋Š” ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

let bang = {};
console.log( bang?.address );	// undefined (์—๋Ÿฌ ๋ฐœ์ƒ ์•ˆํ•จ)
console.log( bang?.address.street );	// undefined

 

?.์˜ ํŠน์ง•์„ ์ •๋ฆฌํ•ด๋ณด์ž.

  • ?. ์•ž์˜ ๋ณ€์ˆ˜๋Š” ๋ฐ˜๋“œ์‹œ ์„ ์–ธ๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • ?. ๋Š” ๋‹จ๋ฝํ‰๊ฐ€๋ฅผ ํ•˜์—ฌ ์™ผ์ชฝ ๋Œ€์ƒ์— ๊ฐ’์ด ์—†์œผ๋ฉด ์ฆ‰์‹œ ํ‰๊ฐ€๋ฅผ ๋ฉˆ์ถ˜๋‹ค.
  • ?. ๋Š” ์—ฐ์‚ฐ์ž๊ฐ€ ์•„๋‹ˆ๋ผ ํ•จ์ˆ˜/๋Œ€๊ด„ํ˜ธ์™€ ํ•จ๊ป˜ ๋™์ž‘ํ•˜๋Š” ๋ฌธ๋ฒ• ๊ตฌ์กฐ์ฒด์ด๋‹ค.

3. ?.()  ?.[]

?.๋Š” ์—ฐ์‚ฐ์ž๊ฐ€ ์•„๋‹Œ ๋ฌธ๋ฒ• ๊ตฌ์กฐ์ฒด๋ผ๊ณ  ํ–ˆ๋‹ค. ์‚ฌ์šฉ ์˜ˆ์‹œ๋ฅผ ๋ณด์ž.

 

1. ๊ฐ์ฒด ๋‚ด ํ•จ์ˆ˜์˜ ์กด์žฌ ์—ฌ๋ถ€ ํ™•์ธ

let user1 = {
  admin() {
    alert("๊ด€๋ฆฌ์ž ๊ณ„์ •์ž…๋‹ˆ๋‹ค.");
  }
}

let user2 = {};

user1.admin?.();	// ๊ด€๋ฆฌ์ž ๊ณ„์ •์ž…๋‹ˆ๋‹ค.
user2.admin?.();

 

  • ?.()๋ฅผ ์‚ฌ์šฉํ•ด admin์˜ ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ–ˆ๋‹ค.
    user1 : admin์ด ์กด์žฌํ•˜๋ฏ€๋กœ ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ ๋จ
    user2 : admin์ด ์กด์žฌํ•˜์ง€ ์•Š์œผ๋‚˜(null/undefined) ์—๋Ÿฌ ์—†์ด ์ง„ํ–‰๋จ.

2. ๊ฐ์ฒด ๋‚ด ํ”„๋กœํผํ‹ฐ์˜ ์กด์žฌ ์—ฌ๋ถ€ ํ™•์ธ

let user1 = {
  firstName: "bang"
};

let user2 = null;
let key = "firstName";

console.log(user1?.[key]);	// bang
console.log(user2?.[key]);	// undefined
console.log(user1?.something?.not?.existing);	// undefined
  • ?.[] ๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ์ฒด์˜ ์กด์žฌ ์—ฌ๋ถ€๊ฐ€ ํ™•์‹คํ•˜์ง€ ์•Š์•„๋„ ์•ˆ์ „ํ•˜๊ฒŒ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค.

 

3. delete์™€ ?.

delete ํ‚ค์›Œ๋“œ์™€ ์กฐํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

delete user?.name;	// user๊ฐ€ ์กด์žฌํ•˜๋ฉด user.name์„ ์‚ญ์ œ

user๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด ?.๋Š” user๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— delete user.name์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

?. ๋Š” ์ด๋ ‡๊ฒŒ ์ฝ๊ฑฐ๋‚˜ ์‚ญ์ œ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ž‘์„ฑ(์“ฐ๊ธฐ)์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

 

?. ์€ ์™ผ์ชฝ ๋Œ€์ƒ์ด ์—†์–ด๋„ ๊ดœ์ฐฎ์€ ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

๊ผญ ์žˆ์–ด์•ผํ•˜๋Š”๋ฐ ์—†๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•˜๋ฉด ์—๋Ÿฌ๋ฅผ ๋ฐœ๊ฒฌํ•˜๊ธฐ ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

 

์ฐธ๊ณ 

๋ฐ˜์‘ํ˜•