JSON
JavaScript Object Notation(์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด ํ๊ธฐ๋ฒ)์ ์ค์๋ง๋ก JSON์ด๋ผ ํํํ๋ค. ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ฑฐ๋ ์ ์กํ ๋ ๋ง์ด ์ฌ์ฉ๋๋ Data ๊ตํ ํ์์ด๋ฉฐ, ๊ฐ์ฒด๋ฅผ ๋ง๋ค ๋ ์ฌ์ฉํ๋ ํํ์์ ์๋ฏธํ๋ค. ๋จ์ํ ๋ฐ์ดํฐ๋ฅผ ํ์ํ๋ ํํ ๋ฐฉ๋ฒ์ด๋ฉฐ, ๋ฐ์ดํฐ ํฌ๋งท์ผ ๋ฟ์ด๋ค. ์ฌ์ค์ ์ฐ์ ํ์ค์ผ๋ก ์ฌ์ฉํ๊ณ ์๋ค.
Object(๊ฐ์ฒด)์ ์์ ์ ์
๋ฐ์ดํฐ ์ด๋ฆ๊ณผ ๊ฐ์ ํ ์์ผ๋ก ๊ตฌ์ฑ๋๋ฉฐ, key์ value์ ์์ผ๋ก ๊ตฌ์ฑ๋ ์๋ฃ ๊ตฌ์กฐ์ด๋ค.
ํ๋์ ๋ณ์ ์์ ๋ค๋ฅธ ํ์ ๋ณ์๋ฅผ ๋ด์ฅํ๋ ํน์ํ ํํ์ ๋ณ์์ด๋ฉฐ, ํ์ ๋ฐ์ดํฐ์ ์ ๊ทผํ๊ธฐ ์ํด์๋ ์ (.)์ผ๋ก ๊ตฌ๋ถํ๋ค.
๊ทธ๋ฌ๋ฏ๋ก, JSON์ ์ด๋ค ๋ณ์ ์์ ํ์ ๋ณ์๋ฅผ ๋ด์ฅ์ํค๊ธฐ ์ํ JavaScript์ ํ๊ธฐ๋ฒ์ด๋ผ๊ณ ํ ์ ์๋ค.
๊ฐ์ฒด๋ณ์์ด๋ฆ.ํ์๋ณ์1์ด๋ฆ = 123;
๊ฐ์ฒด๋ณ์์ด๋ฆ.ํ์๋ณ์2์ด๋ฆ = 456;
๊ฐ์ฒด๋ณ์์ด๋ฆ.ํ์๋ณ์n์ด๋ฆ = 999;
JSON ํ๊ธฐ๋ฒ์ผ๋ก ๊ฐ์ฒด ์ ์
1. ๋ณ์๋ค์ ๊ทธ๋ฃน์ผ๋ก์์ ๊ฐ์ฒด ์ ์
ํ๋์ ๋ณ์์ ํ์ ์ ๋ณด๋ค์ด ํฌํจ๋์ด ์๋ ๋ณ์๋ค์ ๊ทธ๋ฃน์ผ๋ก ์ดํดํ๋ค.
key ์ด๋ฆ์ ์ง์ ํ ํ, ์ฝ๋ก (:)์ผ๋ก ๊ตฌ๋ถ ์ง์ ํ์ ๊ฐ์ ๋ช ์ํ๋ฉฐ, ๋ ๊ฐ ์ด์์ ๋ฐ์ดํฐ๋ ์ฝค๋ง(,)๋ก ๊ตฌ๋ถํ๋ค.
์์น์ ์ผ๋ก key ์ด๋ฆ์ ๋ฐ์ดํ๋ก ๊ฐ์ธ๋ ๊ฒ์ด ๋ง์ง๋ง, key ์ด๋ฆ์ ๋์ด์ฐ๊ธฐ๋ ๋์(-)๊ฐ ใ ๋ฒ๋ ๊ฒฝ์ฐ์๋ ๋ฐ์คํ ์ฒ๋ฆฌ๋ฅผ ์๋ตํด๋ ๋ฌด๊ดํ๋ค. ์ซ์, boolean, null, undefined๋ ๋ฐ์ดํ๋ฅผ ์ ์ฉํ์ง ์๋๋ค.
const ๊ฐ์ฒด์ด๋ฆ = { ์ด๋ฆ1: ๊ฐ1, ์ด๋ฆ2: ๊ฐ2, ..., ์ด๋ฆn: ๊ฐn };
/** ๋ณ์๋ค์ ๊ทธ๋ฃน์ผ๋ก์์ JSON ์ ์ */
const student = {
// key: value, key: value ... ์ ํ์์ผ๋ก ๋์ด
// ์ซ์, boolean, null, undefined๋ ๋ฐ์ดํ ์ ์ฉ ์ ํจ
studno: 10101,
grade: 1,
name: "ํ์1",
phoneno: "010-1231-2342"
};
- ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ์ ์ถ๋ ฅ
- ๋ฐ์ดํฐ์ ์ ๊ทผํ๋ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ์
๊ฐ์ฒด์ด๋ฆ.ํ์์ ๋ณด์ด๋ฆ
์ด๋ฉฐ, 90% ์ด์์ ๊ฒฝ์ฐ์์ ์ด ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
- ๋ฐ์ดํฐ์ ์ ๊ทผํ๋ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ์
console.log("----------์ถ๋ ฅ type1----------");
console.log("ํ๋ฒ: " + student.studno);
console.log("ํ๋
: " + student.grade);
console.log("์ด๋ฆ: " + student.name);
console.log("์ฐ๋ฝ์ฒ: " + student.phoneno);
console.groupEnd();
- JSON์ key ์ด๋ฆ์ ๋ฐฐ์ด์ ์ธ๋ฑ์ค์ฒ๋ผ ํ์ฉ
console.log("----------์ถ๋ ฅ type2----------");
console.log("ํ๋ฒ: " + student['studno']);
console.log("ํ๋
: " + student['grade']);
console.log("์ด๋ฆ: " + student['name']);
console.log("์ฐ๋ฝ์ฒ: " + student['phoneno']);
console.groupEnd();
- ์ ๊ทผํ๊ณ ์ ํ๋ ํ์ ๋ณ์์ ์ด๋ฆ์ ๋์ ์ผ๋ก ์ค์ ํด์ผ ํ ๊ฒฝ์ฐ
const keyName = "phoneno";
console.log(student[keyName]);
- JSON์ key๋ฅผ ๋ฐฐ์ด๋ก ๋ฐํํ๋ ๋ช ๋ น
const keys = Object.getOwnPropertyNames(student);
console.log(keys);
2. ๋ฐฐ์ด์ ํฌํจํ๋ JSON
JSON์ ๊ฐ์๋ ์ง๊ธ๊น์ง ๋ค๋ฃฌ ๋ชจ๋ ํํ์ ๋ฐ์ดํฐ ํ์ ์ด ์ง์ ๊ฐ๋ฅํ๋ค.
const ๊ฐ์ฒด์ด๋ฆ = { ์ด๋ฆ1: ์ซ์, ์ด๋ฆ2: ๋ฌธ์์ด, ..., ์ด๋ฆn: [๊ฐ1, ๊ฐ2, ๊ฐ3 ... ๊ฐn] };
console.log(๊ฐ์ฒด์ด๋ฆ.์ด๋ฆn[0]);
3. ๋ณตํฉ ์๋ฃ ๊ตฌ์กฐ
๋ค์ํ ๋ฐ์ดํฐ ํ์ ์ ํฌํจํ๋ ๊ตฌ์กฐ๋ก, ์ ์ ํตํ ์ ๊ทผ์ ๊ถ์ฅํ๋ค.
์ ๊ทผ ๋ฐฉ๋ฒ | code |
์ ์ผ๋ก ์ฐ๊ฒฐ | console.log(conpany.name); console.log(conpany.department[0]); |
๋ฐฐ์ด์ฒ๋ผ ์ฐ๊ฒฐ | console.log(conpany['since']); console.log(conpany['department'][0]); |
const company = {
name: "(์ฃผ)๊ตฟ๋ชจ๋์ปดํจ๋",
since: 2013,
department: ["๊ธฐํํ", "๋์์ธํ", "๊ฐ๋ฐํ"]
};
console.log(company.name); //์ ์ผ๋ก ์ฐ๊ฒฐ
console.log(company['since']); // ๋ฐฐ์ด์ฒ๋ผ ์ฐ๊ฒฐ
console.log(company.department[0]); //์ ์ผ๋ก ์ฐ๊ฒฐ
console.log(company.department[1]); //์ ์ผ๋ก ์ฐ๊ฒฐ
console.log(company['department'][0]); // ๋ฐฐ์ด์ฒ๋ผ ์ฐ๊ฒฐ
4. ๊ณ์ธต ๊ตฌ์กฐ
JSON ํ๊ธฐ๋ฒ์ ์ฅ์ ์ ๋ณต์กํ ์ ๋ณด ๊ตฌ์กฐ๋ฅผ ๊ณ์ธตํํ์ฌ ํํ ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ด๋ค.
๋จ์ผ ํํ์ JSON ๊ตฌ์กฐ๋ฅผ ๋ณ๋๋ก ์ฐธ์กฐํ๋ ๊ฒ์ด ์๋, ์ง์ ์ ์ํ๋ ํจํด์ผ๋ก๋ ํํ์ด ๊ฐ๋ฅํ๋ค.
/** ๋จ์ผ ํํ์ JSON */
const json1 = { ... };
const json2 = { ... };
/** ๋ค๋ฅธ JSON์ ํฌํจํ๋ JSON */
const json3 = {
data1: json1,
data2: json2
};
/** ๊ณ์ธต์ ์ผ๋ก ์ ์๋ JSON */
const myjson = {
data1: {
...
},
data2: {
...
}
};
5. ๋ชฉ๋ก ๊ตฌ์กฐ
JSON์ value๊ฐ ๋ฐฐ์ด๋ก ์ ์๋์ด ์์ผ๋ฉด์ ๊ฐ ๋ฐฐ์ด์ ์์๊ฐ ๋๋ค๋ฅธ JSON ํ์์ธ ๊ฒฝ์ฐ์ด๋ค. ๋ฐฐ์ด์ ์ฐ๋์๋ก ํฌํจ๋๋ JSON๋ผ๋ฆฌ๋ ๋์ผํ ๊ตฌ์กฐ์ด๋ฉฐ, ๋ณดํต listํ ์ปจํ ์ธ ๊ตฌ์กฐ๋ก ์ฌ์ฉํ๋ค.
/** ๋ชฉ๋ก ๊ตฌ์กฐ๋ฅผ ๊ฐ๋ JSON ๊ฐ์ฒด **/
const ๊ฐ์ฒด์ด๋ฆ= {
key: [value, value...]
}
/** ๋ฐฐ์ด์ ์์๋ก์ JSON ๊ตฌ์กฐ๋ฅผ ์ง์ ๋ช
์ **/
const ๊ฐ์ฒด์ด๋ฆ = {
key : [ {
key: value, key: value...
}, {
key: value, key: value...
}, {
key: value, key: value...
}, {
key: value, key: value...
} ]
}
- ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ํํ์ ๋ชฉ๋ก ๊ตฌ์กฐ
- ๋ชฉ๋ก์ ๊ตฌ์ฑํ๋ ๋ฐฐ์ด ์ธ์ ๋ชฉ๋ก์ ์ค๋ช ํ๊ธฐ ์ํ ๋ถ๊ฐ ์ ๋ณด๋ ํจ๊ป ํฌํจ๋๋ค.
const bbs = {
title: '๊ณต์ง์ฌํญ',
count: 4,
item: [
{id: 1, subject: '์ฒซ ๋ฒ์งธ ๊ฒ์๋ฌผ ์ ๋ชฉ'},
{id: 2, subject: '๋ ๋ฒ์งธ ๊ฒ์๋ฌผ ์ ๋ชฉ'},
{id: 3, subject: '์ธ ๋ฒ์งธ ๊ฒ์๋ฌผ ์ ๋ชฉ'},
{id: 4, subject: '๋ค ๋ฒ์งธ ๊ฒ์๋ฌผ ์ ๋ชฉ'}
]
};
JSON ๊ตฌ์กฐ ํ์ฅ
1. ์กด์ฌํ์ง ์๋ key๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
์กด์ฌํ์ง ์๋ key์ ๋ํด ์ถ๋ ฅํ๊ฑฐ๋ ๋ค๋ฅธ ๋ณ์์ ๋์ ํ ๊ฒฝ์ฐ, undefined๋ก ์ฒ๋ฆฌ๋๋ค.
- ์กด์ฌํ์ง ์๋ ๊ฐ์ ๋ํ ์ถ๋ ฅ
const foo = {
name: "์๋ฐ์คํฌ๋ฆฝํธ",
age: 19
};
// ์กด์ฌํ์ง ์๋ ๊ฐ์ ๋ํ ์ถ๋ ฅ -> undefined
console.log(foo.email);
- ์กด์ฌํ์ง ์๋ ๊ฐ์ ํ์ฉํ ์ฐ์ฐ
const foo = {
name: "์๋ฐ์คํฌ๋ฆฝํธ",
age: 19
};
const nextAge = foo.aga + 1; // undefined + 1
console.log(nextAge);
// ์ซ์๊ฐ ์๋ ๊ฒฐ๊ณผ๊ฐ์ด ๋๋ฏ๋ก Not A Number๋ฅผ ์๋ฏธํ๋ NaN์ด ์ถ๋ ฅ
2. ์กด์ฌํ์ง ์๋ key์ ๋ํ ๋์
์ฆ์ ๊ฐ์ฒด๋ฅผ ํ์ฅํ๋ฉฐ, ์กด์ฌํ์ง ์๋ key์ ๋ํ ๋์ ์ ์์ฃผ ์ฌ์ฉ๋๋ค.
const foo = {
name: "์๋ฐ์คํฌ๋ฆฝํธ",
age: 19
};
foo.email = "hello@world.com";
console.log(foo);
/** ๊ฒฐ๊ณผ **/
{ name: '์๋ฐ์คํฌ๋ฆฝํธ', age: 19, email: 'hello@world.com' }
3. ๋น ๊ฐ์ฒด ํ์ฅ
์๋ฌด๋ฐ key๋ ์ ์๋์ง ์์ ๋น JSON ๊ฐ์ฒด์ ์ ์ง์ ์ผ๋ก ๋ด์ฉ์ ๋ง๋ถ์ผ ์ ์๋ค.
const myJson = {}; // ๋น ๊ฐ์ฒด
console.log(myJson);
for (let i=0; i<10; i++) {
const key = "value" + i;
myJson[key] = i * 100;
}
console.log(myJson);
/** ๊ฒฐ๊ณผ **/
{}
{
value0: 0,
value1: 100,
value2: 200,
value3: 300,
value4: 400,
value5: 500,
value6: 600,
value7: 700,
value8: 800,
value9: 900
}
JSON ๋ฐ๋ณต๋ฌธ
๋ฐฐ์ด์ ํค๋ฅผ ์ฐธ์กฐํ์ฌ ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ๋ค. ๋ฐ๋ณตํ๋ ๋์ ๊ฐ์ฒด๋ฅผ ์ถ๊ฐ ๋๋ ์ ๊ฑฐํ ์ ์๋ค.
for(๋ณ์ in Json) {
}
const student = {
studno: 10101,
grade: 1,
name: "ํ์1",
phoneno: "010-1231-2342"
};
for (let key in student) {
console.log(student[key]);
};
/** ๊ฒฐ๊ณผ **/
10101
1
ํ์1
010-1231-2342
์ฐธ์กฐ ๋ณต์ฌ
1. ๊ฐ ๋ณต์ฌ
์ผ๋ฐ ๊ฐ ๋ณต์ฌ๋ ์ผ๋ฐ ๋ณ์๋ผ๋ฆฌ์ ๋ณต์ฌ๋ฅผ ์๋ฏธํ๋ค. ์ผ๋ฐ ๋ณ์๋ผ๋ฆฌ ๋ณต์ฌํ ๊ฒฝ์ฐ, ์๋ณธ์ด ๋ณ๊ฒฝ๋๋ฉด ๋ณต์ฌ๋ณธ์ ์ํฅ์ ์ฃผ์ง ์๋๋ค.
let a = 100;
let b = a; // ๋ณ์ b์ ๋ณ์ a ๊ฐ ๋ณต์ฌ
console.log("a = " + a + ", b = " + b); // a = 100, b = 100
a++; // a ๊ฐ 1 ์ฆ๊ฐ
console.log("a = " + a + ", b = " + b); // a = 101, b = 100
2. ์ฐธ์กฐ ๋ณต์ฌ (=์์ ๋ณต์ฌ)
๋ฐฐ์ด, JSON, ๊ฐ์ฒด๋ผ๋ฆฌ์ ๋ณต์ฌ๋ ์ฐธ์กฐ ์ฒ๋ฆฌ๋ฅผ ํ๋ค.
์ฌ๊ธฐ์ ์ฐธ์กฐ ์ฒ๋ฆฌ๋, ์๋ณธ์ ์์ ํ๋ฉด ๋ณต์ฌ๋ณธ๋ ํจ๊ป ์์ ๋๋ฉฐ, ๋ณต์ฌ๋ณธ์ ์์ ํด๋ ์๋ณธ์ด ํจ๊ป ์์ ๋๋ ๊ฒ์ ๋งํ๋ค.
์๋ก ๋ค๋ฅธ ๋ณ์๊ฐ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ๋ฐ๋ผ๋ณด๊ณ ์๋ ๊ฒ์ ์๋ฏธํ๋ฉฐ, ๊ฐ์ฒด ์์ ๊ฐ์ฒด๊ฐ ์์ ๊ฒฝ์ฐ์๋ ํ ๊ฐ์ ๊ฐ์ฒด๋ผ๋ ์๋ณธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ค๋ฉด ์ด๋ ์ฐธ์กฐ ๋ณต์ฌ(=์์ ๋ณต์ฌ)๊ฐ ๋๋ค.
C์ธ์ด์ ํฌ์ธํฐ(Pointe)์ ๊ฐ์ ๊ฐ๋ ์ผ๋ก ์ดํด๊ฐ ๊ฐ๋ฅํ๋ฉฐ, ์ค์ ๋ก ๊ฐ์ด ๋ณต์ฌ๋์ง๋ ์๋๋ค.
๋ง ๊ทธ๋๋ก ์์ ๋ณต์ฌ์ด๋ฏ๋ก ์๋ฌ ๋ฐ์๋ฅ ์ด ๋์๋ฐ, ์๋ฌ ๋ฐ์๋ฅ ์ ๋ฎ์ถ๊ธฐ ์ํด ๋ฐฐ์ด๋ผ๋ฆฌ์ ๋ณต์ฌ(=๊น์ ๋ณต์ฌ)๋ฅผ ์ฌ์ฉํ๋ค.
const user = {
name: "Lee"
};
const member = user; // ์์ member์ ์์ user ๊ฐ ๋ณต์ฌ
console.log(user);
console.log(member);
member.name = "Kim"; // member์ name ๊ฐ ์์
console.log(user);
console.log(member);
/** ๊ฒฐ๊ณผ **/
{ name: 'Lee' }
{ name: 'Lee' }
{ name: 'Kim' }
{ name: 'Kim' }
const d1 = [1, 2, 3];
const d2 = d1; // ์์ d2์ ์์ d1 ๊ฐ ๋ณต์ฌ
console.log(d1);
console.log(d2);
d1[0] += 10; // d1์ 0๋ฒ์งธ ๊ฐ์ +10
d1[1] += 10; // d1์ 1๋ฒ์งธ ๊ฐ์ +10
d1[2] += 10; // d1์ 2๋ฒ์งธ ๊ฐ์ +10
console.log(d1);
console.log(d2);
/** ๊ฒฐ๊ณผ **/
[ 1, 2, 3 ]
[ 1, 2, 3 ]
[ 11, 12, 13 ]
[ 11, 12, 13 ]
3. ๋ฐฐ์ด๋ผ๋ฆฌ์ ๋ณต์ฌ (=๊น์ ๋ณต์ฌ)
- ๋ฐ๋ณต๋ฌธ ์ด์ฉ
- ๊ฐ์ ๊ฐ์ ์ถ๋ ฅํ๋ฉฐ, ์จ์ ํ ๋ฐฐ์ด์ ๊ฐ์ ๋ณต์ฌํ๊ธฐ ์ํด์๋ ์์๋ผ๋ฆฌ์ ๊ฐ๋ณ ๋ณต์ฌ๊ฐ ํ์ํ๋ค.
const a1 = [1, 2, 3];
// ์๋ณธ a1๊ณผ ๋์ผํ ๊ธธ์ด๋ฅผ ๊ฐ๋ ๋ฐฐ์ด์ ์์ฑ
const a2 = new Array(a1.length);
// ๋ฐฐ์ด์ ์จ์ ํ ๊ฐ ๋ณต์ฌํ๊ธฐ ์ํด์๋ ์์๋ผ๋ฆฌ ๊ฐ๋ณ ๋ณต์ฌ ํ์
for (let i = 0; i < a1.length; i++) {
a2[i] = a1[i];
}
console.log(a1); // [ 1, 2, 3 ]
console.log(a2); // [ 1, 2, 3 ]
a1[0] += 100;
console.group("----- a1[0] += 100 -----");
console.log(a1); // [ 101, 2, 3 ]
console.log(a2); // [ 1, 2, 3 ]
console.groupEnd();
- ๋ฉ์๋ ์ด์ฉ
- slice ๋ฉ์๋๋ฅผ ์ด์ฉํ๋ฉด ์์๋ผ๋ฆฌ์ ๊ฐ๋ณ ๋ณต์ฌ๊ฐ ๊ฐ๋ฅํ๋ค.
const a1 = [1, 2, 3];
// ๋ฐฐ์ด ๊ฐ์ฒด๊ฐ ๊ฐ๋ ๋ฉ์๋๋ฅผ ํ์ฉํ ๊น์ ๋ณต์ฌ ๋ฐฉ๋ฒ
const a2 = a1.slice();
console.log(a1); // [ 1, 2, 3 ]
console.log(a2); // [ 1, 2, 3 ]
a1[0] += 100;
console.group("----- a1[0] += 100 -----");
console.log(a1); // [ 101, 2, 3 ]
console.log(a2); // [ 1, 2, 3 ]
console.groupEnd();
- JavaScript ๋ด์ฅ ๊ธฐ๋ฅ ์ด์ฉ
- ๋น JSON ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ, ์์ฑํ ๊ฐ์ฒด๊ฐ ๋น์ด ์๋ค๋ฉด ์๋ณธ JSON ๊ฐ์ฒด๋ฅผ ๋์ ์ถ๊ฐํ์ฌ ๋ณต์ฌํ๋ค.
/** ๋ฐ๋ณต๋ฌธ for๋ฌธ ์ด์ฉ **/
const addr = {
city: '์์ธ',
gu: '์์ด'
};
const copy = {}; // ๋น JSON ๊ฐ์ฒด ์์ฑ
for (let key in addr) {
copy[key] = addr[key];
}
console.log(addr); // { city: '์์ธ', gu: '์์ด' }
console.log(copy); // { city: '์์ธ', gu: '์์ด' }
addr.gu = '๊ฐ๋จ';
console.group("----- addr.gu = '๊ฐ๋จ' -----");
console.log(addr); // { city: '์์ธ', gu: '๊ฐ๋จ' }
console.log(copy); // { city: '์์ธ', gu: '์์ด' }
console.groupEnd();
/** Object .assign() ์ด์ฉ **/
const addr = {
city: '์์ธ',
gu: '์์ด'
};
// ๊น์ ๋ณต์ฌ๋ฅผ ์ํํ ๋น JSON ๊ฐ์ฒด ์์ฑ
const copy = {};
// addr์ copy2์ ๊น์ ๋ณต์ฌ๋ฅผ ์ํํ๋ JS ๋ด์ฅ ๊ธฐ๋ฅ
// ๋ณต์ฌ๋ copy2๊ฐ ๋น์ด์๋ json์ผ ๊ฒฝ์ฐ ๋ณต์ฌ ๊ฐ๋ฅ
// ๋น์ด ์์ง ์์ผ๋ฉด ์ถ๊ฐ๋ฅผ ํ๊ฒ ๋จ --> ๋์
Object.assign(copy, addr);
console.log(copy); // { city: '์์ธ', gu: '์์ด' }
addr.gu = '๊ฐ๋จ';
console.log(addr); // { city: '์์ธ', gu: '๊ฐ๋จ' }
console.log(copy); // { city: '์์ธ', gu: '์์ด' }
์ต์ ๋ ์ฒด์ด๋ (Optional Chaining)
?.์ ํํ๋ก ์ฌ์ฉํ๋ฉฐ, ๊ฐ ์ฐธ์กฐ๊ฐ ์ ํจํ์ง์ ๋ํ ์ฌ๋ถ๋ฅผ ๊ฒ์ฌํ๋ ์ฐ์ฐ์์ด๋ค.
์ฐธ์กฐ๊ฐ null ํน์ undefined๋ผ๋ฉด, ๊ฒ์ฌ๋ฅผ ์ค์งํ๊ณ ์๋ฌ์ ๋ฐ์ ๋์ undefined ๊ฐ์ ๋ฆฌํดํ๋ค.
์์ฑ ๊ฐ์ด ์กด์ฌํ๋ค๋ ํ์คํ ๋ณด์ฆ์ด ์์ ๊ฒฝ์ฐ, ๊ทธ ๊ฐ์ฒด๋ฅผ ํ์ํ๋ ๋ฐ์ ๋์์ ์ค๋ค.
์ต์ ๋ ์ฒด์ด๋์ ์ฌ์ฉํจ์ผ๋ก์ ๋ฌธ๋ฒ์ ๊ฐ๋ ์ฑ์ด ์ฌ๋ผ๊ฐ๊ณ , ๊ฐ๊ฒฐํ ํํ์์ผ๋ก ์์ฑ์ด ๊ฐ๋ฅํ๋ค.
๊ทธ๋ฌ๋, ํ์์ ์ด์ง ์์ ๊ฐ์ฒด์๊ฒ๋ง ์ฌ์ฉํด์ผ ํ๋ฉฐ, ํ์์ ์ธ ๊ฐ์ฒด์๊ฒ๋ ์ต์ ๋ ์ฒด์ด๋ ๋์ if๋ฌธ์ผ๋ก ์กด์ฌ ์ฌ๋ถ๋ฅผ ๊ฒ์ฌํ๋ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์ํํ๋ ๊ฒ์ด ์ข๋ค.
ES2020์์ ์๋กญ๊ฒ ๋ฑ์ฅํด JavaScript์ ์ถ๊ฐ๋์ง ์ผ๋ง ๋์ง ์์ ๋ฌธ๋ฒ์ผ๋ก, IE์์๋ ์ง์ํ์ง ์๊ณ 10% ๋ฏธ๋ง์ผ๋ก ๋๋ฌผ๊ฒ ์ฌ์ฉ๋๋ค.
1. ์ ์๋์ง ์์ ๊ฐ์ฒด์ ์ ๊ทผ
/** user ์์ address๊ฐ ์ ์๋์ง ์์์ผ๋ฏ๋ก undefined๊ฐ ๋ฐ์ **/
const user = {};
console.log(user.address); // undefined
2. ์ ์๋์ง ์์ ๊ฐ์ฒด์ ํ์ ๊ธฐ๋ฅ์ ์ ๊ทผ
/** address ์์ฒด๊ฐ ์ ์๋์ง ์์ ์ํ์์ ํ์ ๊ธฐ๋ฅ์ ์ ๊ทผํ๋ฏ๋ก ์๋ฌ ๋ฐ์ **/
const user = {};
console.log(user.address.city); // Error
3. AND ์ฐ์ฐ์๋ก ๊ฐ์ฒด ์กด์ฌ ์ฌ๋ถ ๊ฒ์ฌ
/** ๋จ๊ณ๋ณ๋ก ๊ฐ์ฒด๊ฐ ์กด์ฌํ๋์ง ๊ฒ์ฌ **/
const user = {};
console.log(user && user.address && user.address.city); // undefined
4. ์ต์ ๋ ์ฒด์ด๋์ผ๋ก ๊ฐ์ฒด ์กด์ฌ ์ฌ๋ถ ๊ฒ์ฌ
/** if๋ฌธ์ด๋ AND ์ฐ์ฐ์ ์ฌ์ฉ ์์ด ๊ฐ์ฒด ์กด์ฌ ์ฌ๋ถ ๊ฒ์ฌ ๊ฐ๋ฅ **/
const user = {};
console.log(user?.address?.city); // undefined
'Study > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript] ๋ธ๋ผ์ฐ์ ์ ์ฅ์ (0) | 2022.07.08 |
---|---|
[JavaScript] ๋ธ๋ผ์ฐ์ ๋ ๋๋ง ๋์ ์๋ฆฌ (0) | 2022.07.08 |
[JavaScript] ๋ฐฐ์ด (0) | 2022.04.29 |
[JavaScript] ๊ธฐ๋ณธ ๋ฌธ๋ฒ ํ์ฉ (0) | 2022.04.24 |
[JavaScript] ๋ณ์์ ์ ํจ์ฑ ๋ฒ์ (๋ณ์์ ์ค์ฝํ) (0) | 2022.04.24 |