[JS] ์๋ฐ์คํฌ๋ฆฝํธ ์ต์ ๋ ์ฒด์ด๋
์ต์ ๋ ์ฒด์ด๋ ๋ฑ์ฅ ๋ฐฐ๊ฒฝ
๋น๊ต์ ์๋ก ์ถ๊ฐ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ์ผ๋ก ํ๋กํผํฐ๊ฐ ์๋ ์ค์ฒฉ ๊ฐ์ฒด๋ฅผ ์๋ฌ์์ด ์ ๊ทผํ ๋ ์ฌ์ฉํ๋ค. ์ ์ ์ ๋ณด๋ฅผ ๋ด์๋๋ user
๊ฐ์ฒด์ ์๋ฌด๋ฐ ์ ๋ณด๊ฐ ์๋ ์ํ์์ address
์์ฑ์ ์ ๊ทผํ๋ ค๊ณ ํ๋ฉด ์๋์ฒ๋ผ ํ์
์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
const user = {};
console.log(user.address.street);
// TypeError: Cannot read property 'street' of undefined
React๋ Vue์ ์ํ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ธ ๋ ์์ง ์คํ ์ด์ ์๋ ์ ๋ณด๋ฅผ ๋ค ๋ถ๋ฌ์ค์ง ์์ ์์ ์์ ๊ฐ์ฒด์ ์์ฑ์ ์ ๊ทผํ ๋๋ ๋น์ทํ ํ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
// selectedMall์ ์คํ ์ด์์ ๋ถ๋ฌ์ฌ ์ ๋ณด
// ์์ง ์คํ ์ด์์ selectedMall ์ ๋ณด๋ฅผ ์กฐํํ์ง ์์ ์ํ๋ผ๋ฉด
// ์๋ ์ฝ๋๊ฐ ์คํ๋ ์์ ์์ ํ์
์๋ฌ๊ฐ ๋ฐ์ํ๋ค
watch(
() => selectedMall.value,
(newValue, oldValue) => {
if (oldValue.id === newValue.id) {
return updateInboxState();
}
if (newValue.id) {
updateInboxState();
}
},
);
์ค์ฒฉ ๊ฐ์ฒด์ ํน์ ํ๋กํผํฐ์ ์ ๊ทผํ ๋ ๊ฑฐ์น๋ ์์ฑ๋ค์ AND
์ฐ์ฐ์๋ฅผ ํ์ฉํด ์ค์ ํด๋น ๊ฐ์ฒด๋ ํ๋กํผํฐ๊ฐ ์๋์ง ํ์ธํ์ฌ ํ์
์๋ฌ๋ฅผ ํผํ ์ ์๋ค. ํ์ง๋ง ์ด ๊ฐ์ ๋ฐฉ์์ ์ฝ๋๊ฐ ๋งค์ฐ ๊ธธ์ด์ง๋ ๋จ์ ์ด ์กด์ฌํ๋ค.
const user = {};
console.log(user && user.address && user.address.street);
์ต์ ๋ ์ฒด์ด๋ ์ฌ์ฉ๋ฒ
๐ก ๊ตฌํ ๋ธ๋ผ์ฐ์ ์์ ํด๋ฆฌํ ํ์
์ต์
๋ ์ฒด์ด๋์ ์์ฑ์ ๋ช
์ํ๋ ์จ์ ์์ ๋ฌผ์ํ๋ฅผ ?.
์ถ๊ฐํ๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ๋ค. ํ๊ฐ ๋์์ด undefined
๊ฑฐ๋ null
์ด๋ฉด ํ๊ฐ๋ฅผ ๋ฉ์ถ๊ณ undefined
๋ฅผ ๋ฐํํ๋ค. ์ฆ ์ ๊ทผํ๋ ๊ฐ์ฒด๋ ๊ฐ์ฒด์ ์์ฑ์ด ์กด์ฌํ์ง ์๋๋ค๋ฉด undefined
๋ฅผ ๋ฐํํ๋ค.
const user = {};
console.log(user?.address?.street); // undefined
const user = null;
console.log(user?.address); // undefined
๋จ๋ฝ ํ๊ฐ
?.
์ผ์ชฝ ํ๊ฐ ๋์์ ๊ฐ์ด ์์ผ๋ฉด ํ๊ฐ๋ฅผ ๋ฉ์ถ๋ค. ์ด๋ฐ ํ๊ฐ ๋ฐฉ์์ ๋จ๋ฝ ํ๊ฐ(short-circuit)๋ผ๊ณ ๋ถ๋ฅธ๋ค. ์ผ์ชฝ ?.
์ ํ๊ฐ๋ฅผ ๋ฉ์ท๋ค๋ฉด ?.
์ฐ์ธก์ ์๋ ๋ถ๊ฐ๋์๋ ์คํํ์ง ์๋๋ค.
const user = null;
let x = 0;
user?.sayHi(x++); // ์๋ฌด ์ผ๋ ์ผ์ด๋์ง ์๋๋ค
console.log(x); // 0
// user?.๊ฐ null์ด์ด์ ํ๊ฐ๋ฅผ ๋ฉ์ถฒ๊ธฐ ๋๋ฌธ์
// ?. ์ฐ์ธก์ ์๋ ๋ถ๊ฐ๋์์ ์คํํ์ง ์๋๋ค
?.() ?.[]
โถ ๋ฉ์๋์ ํจ๊ป ์ฌ์ฉ
`?.` ์ ์ฐ์ฐ์๊ฐ ์๋ ํจ์๋ ๋๊ดํธ์ ํจ๊ป ๋์ํ๋ Syntax Construct๋ค. ์๋ ์ฝ๋์์ `user` ๊ฐ์ฒด๋ ๋ชจ๋ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ `admin` ์์ฑ์๋ง `?.` ์ ์ฌ์ฉํด์ ์ ๊ทผํ๋ค.
const user1 = {
admin() {
console.log('๊ด๋ฆฌ์ ๊ณ์ ');
},
};
const user2 = {};
user1.admin?.(); // ๊ด๋ฆฌ์ ๊ณ์
user2.admin?.(); // undefined
`user1` ๊ฐ์ฒด์ `admin` ๋ฉ์๋๊ฐ ์ ์๋์ด ์๊ธฐ ๋๋ฌธ์ ์ ์์ ์ผ๋ก ํธ์ถ๋๋ค. `user2` ๊ฐ์ฒด์ `admin`์ด ์ ์๋์ด ์์ง ์์ ์ํ์์ ํธ์ถํ์ง๋ง ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์๊ณ ํ๊ฐ๋ฅผ ๋ฉ์ถ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
โท `[]` ๋๊ดํธ์ ํจ๊ป ์ฌ์ฉ
`?.[]` ๋๊ดํธ๋ฅผ ์ฌ์ฉํด์ ๊ฐ์ฒด ์์ฑ์ ์ ๊ทผํ ์๋ ์๋ค. ์๋ ๋ฐฉ์์ ๋์ผํ๋ค.
const user1 = { firstName: "John" };
const user2 = null;
const key = "firstName";
console.log(user1?.[key]); // John
console.log(user2?.[key]); // undefined
โธ `delete` ์ฐ์ฐ์์ ํจ๊ป ์ฌ์ฉ
delete user?.name; // user ๊ฐ์ฒด๊ฐ ์กด์ฌํ๋ฉด user.name ์ญ์
์ฃผ์ ์ฌํญ
โถ ์ต์ ๋ ์ฒด์ด๋์ `?.`์ ์กด์ฌํ์ง ์์๋ ๊ด์ฐฎ์ ๋์์ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข๋ค(๋๋ฒ๊น ์ ์ํด). ์ ์์์์ ์ฌ์ฉ์ ์ฃผ์๋ฅผ ๋ค๋ฃจ๋ `user`๋ ๋ฐ๋์ ์์ด์ผ ํ์ง๋ง `address` ์์ฑ์ ํ์๊ฐ ์๋๋ค. ๋ฐ๋ผ์ ์๋์ฒ๋ผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ๋ฐ๋์งํ๋ค.
user.address?.street
โท ๊ฐ์ฅ ์์ `?.` ๋ฌผ์ํ๊ฐ ๋ค์ด๊ฐ๋ ๋ณ์๋ ๊ผญ ์ ์ธ๋์ด ์์ด์ผ ํ๋ค. ๋ง์ฝ `user` ๊ฐ์ฒด๊ฐ `let` `const` ๋ฑ์ผ๋ก ์ ์ธ๋์ด ์์ง ์์ผ๋ฉด ํ๊ฐ์ ์๋์ฒ๋ผ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
console.log(user?.address);
// ReferenceError: user is not defined
โธ `?.` ์ ์ฝ๊ธฐ๋ ์ญ์ ์ ์ฌ์ฉํ ์ ์์ง๋ง ์ฐ๊ธฐ์ ์ฌ์ฉํ ์ ์๋ค. ๋๋ฌธ์ ์๋์ฒ๋ผ ํ ๋น ์ฐ์ฐ์ ์ผ์ชฝ์์ ์ฌ์ฉํ ์ ์๋ค. ์๋์ฒ๋ผ `user`๊ฐ ์กด์ฌํ ๊ฒฝ์ฐ `user.name`์ ์๋ก์ด ๊ฐ์ ํ ๋นํ๋ ค๋ ์๋๋ก ์์ฑํ ์ฝ๋๋ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
user?.name = 'John'; // SyntaxError: Invalid left-hand side in assignment
// ์ ์๋ฌ๋ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ undefined = "John"๋ก ํด์ํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ํ๋ค
์ฐธ๊ณ
๊ธ ์์ ์ฌํญ์ ๋ ธ์ ํ์ด์ง์ ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ๋ฐ์๋ฉ๋๋ค. ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด ์ฃผ์ธ์
'๐ช Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[HTML/CSS] ์๋งจํฑ ํ๊ทธ Semantic Tag (0) | 2024.04.25 |
---|---|
[JS] ์๋ฉด ์ ์ฉํ ์๋ฐ์คํฌ๋ฆฝํธ ์ต์ ๋ฌธ๋ฒ (0) | 2024.04.25 |
[Git] ๋ณ๊ฒฝํ ์ํ ์์ ์ ์ฅ ํ ๋ธ๋์น ์ด๋ ๋ฐฉ๋ฒ โ Git Stash (0) | 2024.04.25 |
[JS] console.log ์ฝ์ ๋ก๊ทธ ๋ ์ ์ฌ์ฉํ๊ธฐ (0) | 2024.04.25 |
[React] ๋ฆฌ์กํธ์์ SVG ์ฌ์ฉ๋ฒ (0) | 2024.04.25 |
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[HTML/CSS] ์๋งจํฑ ํ๊ทธ Semantic Tag
[HTML/CSS] ์๋งจํฑ ํ๊ทธ Semantic Tag
2024.04.25 -
[JS] ์๋ฉด ์ ์ฉํ ์๋ฐ์คํฌ๋ฆฝํธ ์ต์ ๋ฌธ๋ฒ
[JS] ์๋ฉด ์ ์ฉํ ์๋ฐ์คํฌ๋ฆฝํธ ์ต์ ๋ฌธ๋ฒ
2024.04.25 -
[Git] ๋ณ๊ฒฝํ ์ํ ์์ ์ ์ฅ ํ ๋ธ๋์น ์ด๋ ๋ฐฉ๋ฒ — Git Stash
[Git] ๋ณ๊ฒฝํ ์ํ ์์ ์ ์ฅ ํ ๋ธ๋์น ์ด๋ ๋ฐฉ๋ฒ — Git Stash
2024.04.25 -
[JS] console.log ์ฝ์ ๋ก๊ทธ ๋ ์ ์ฌ์ฉํ๊ธฐ
[JS] console.log ์ฝ์ ๋ก๊ทธ ๋ ์ ์ฌ์ฉํ๊ธฐ
2024.04.25