๐ข 22/07/29 ๋ณต์ต
javascript.info, https://ko.javascript.info/object
์ฐธ๊ณ ์ฌ์ดํธ์ ๋ด์ฉ์ ๊ฐ์ธ์ ์ผ๋ก ๋ณต์ตํ๊ธฐ ํธํ๋๋ก ์ฌ๊ตฌ์ฑํ ๊ธ์ ๋๋ค.
์์ธํ ์ค๋ช ์ ์ฐธ๊ณ ์ฌ์ดํธ๋ฅผ ์ดํด๋ณด์๊ธฐ ๋ฐ๋๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์ ์ฌ๋ ๊ฐ์ง ์๋ฃํ์ด ์์ต๋๋ค. ์ด ์ค ์ผ๊ณฑ ๊ฐ๋ ์ค์ง ํ๋์ ๋ฐ์ดํฐ๋ง ๋ด์ ์ ์์ด "์์ํ(primitive type)"์ด๋ผ ๋ถ๋ฆ ๋๋ค.
๊ทธ๋ฐ๋ฐ ๊ฐ์ฒดํ์ ์์ํ๊ณผ ๋ฌ๋ฆฌ ๋ค์ํ ๋ฐ์ดํฐ๋ฅผ ๋ด์ ์ ์์ต๋๋ค. ํค๋ก ๊ตฌ๋ถ๋ ๋ฐ์ดํฐ ์งํฉ์ด๋ ๋ณต์กํ ๊ฐ์ฒด(entity)๋ฅผ ์ ์ฅํ ์ ์์ฃ . ๊ฐ์ฒด๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฑฐ์ ๋ชจ๋ ๋ฉด์ ๋ น์์๋ ๊ฐ๋ ์ด๋ฏ๋ก ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ ๋ค๋ฃจ๋ ค๋ฉด ๊ฐ์ฒด๋ฅผ ์ ์ดํดํ๊ณ ์์ด์ผ ํฉ๋๋ค.
๊ฐ์ฒด๋ ์ค๊ดํธ {...}
๋ฅผ ์ด์ฉํด ๋ง๋ค ์ ์์ต๋๋ค. ์ค๊ดํธ ์์๋ "ํค(key): ๊ฐ(value)" ์์ผ๋ก ๊ตฌ์ฑ๋ ํ๋กํผํฐ(property) ๋ฅผ ์ฌ๋ฌ ๊ฐ ๋ฃ์ ์ ์๋๋ฐ, ๐ฅ ํค์ ๋ฌธ์ํ๊ณผ ์ฌ๋ณผํ์ด, ๊ฐ์ ๋ชจ๋ ์๋ฃํ์ด ํ์ฉ๋ฉ๋๋ค. ํ๋กํผํฐ ํค๋ "ํ๋กํผํฐ ์ด๋ฆ" ์ด๋ผ๊ณ ๋ ๋ถ๋ฆ
๋๋ค.
๋น ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ ๊ฐ์ง๊ฐ ์์ต๋๋ค.
let user = new Object(); // "๊ฐ์ฒด ์์ฑ์" ๋ฌธ๋ฒ
let user = {}; // "๊ฐ์ฒด ๋ฆฌํฐ๋ด" ๋ฌธ๋ฒ
์ค๊ดํธ {...}
๋ฅผ ์ด์ฉํด ๊ฐ์ฒด๋ฅผ ์ ์ธํ๋ ๊ฒ์ ๊ฐ์ฒด ๋ฆฌํฐ๋ด(object literal) ์ด๋ผ๊ณ ๋ถ๋ฆ
๋๋ค. ๊ฐ์ฒด๋ฅผ ์ ์ธํ ๋ ์ฃผ๋ก ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํฉ๋๋ค.
์ค๊ดํธ {...}
์์๋ "ํค: ๊ฐ" ์์ผ๋ก ๊ตฌ์ฑ๋ ํ๋กํผํฐ๊ฐ ๋ค์ด๊ฐ๋๋ค.
let user = { // ๊ฐ์ฒด
name: "John", // ํค: "name", ๊ฐ: "John"
age: 30 // ํค: "age", ๊ฐ: 30
};
"์ฝ๋ก (:)"์ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ์ ํค๊ฐ, ์ค๋ฅธ์ชฝ์ ๊ฐ์ด ์์นํฉ๋๋ค. ํ๋กํผํฐ ํค๋ ํ๋กํผํฐ "์ด๋ฆ" ํน์ "์๋ณ์"๋ผ๊ณ ๋ ๋ถ๋ฆ ๋๋ค.
๊ฐ๋ฐ์๋ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ฅผ ์ถ๊ฐ, ์ญ์ ํ ์ ์์ต๋๋ค. ์ ํ๊ธฐ๋ฒ(dot notation)์ ์ด์ฉํ๋ฉด ํ๋กํผํฐ ๊ฐ์ ์ฝ๋ ๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค.
// ํ๋กํผํฐ ๊ฐ ์ป๊ธฐ
alert( user.name ); // John
alert( user.age ); // 30
ํ๋กํผํฐ ๊ฐ์ ๋ชจ๋ ์๋ฃํ์ด ์ฌ ์ ์์ต๋๋ค. ๋ถ๋ฆฐํ ํ๋กํผํฐ๋ฅผ ์ถ๊ฐํด๋ด ์๋ค.
user.isAdmin = true;
delete
์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋กํผํฐ๋ฅผ ์ญ์ ํ ์ ์์ต๋๋ค.
delete user.age;
์ฌ๋ฌ ๋จ์ด๋ฅผ ์กฐํฉํด ํ๋กํผํฐ ์ด๋ฆ์ ๋ง๋ ๊ฒฝ์ฐ์ ํ๋กํผํฐ ์ด๋ฆ์ ๋ฐ์ดํ๋ก ๋ฌถ์ด์ค์ผ ํฉ๋๋ค.
let user = {
name: "John",
age: 30,
"likes birds": true // ๋ณต์์ ๋จ์ด๋ ๋ฐ์ดํ๋ก ๋ฌถ์ด์ผ ํฉ๋๋ค.
};
๋ง์ง๋ง ํ๋กํผํฐ ๋์ ์ผํ๋ก ๋๋ ์ ์์ต๋๋ค.
let user = {
name: "John",
age: 30,
}
์ด๋ฐ ์ผํ๋ฅผ "trailing(๊ธธ๊ฒ ๋์ด์ง๋)" ํน์ "hanging(๋งค๋ฌ๋ฆฌ๋)" ์ผํ๋ผ๊ณ ๋ถ๋ฆ ๋๋ค. ์ด๋ ๊ฒ ๋์ ์ผํ๋ฅผ ๋ถ์ด๋ฉด ๋ชจ๋ ํ๋กํผํฐ๊ฐ ์ ์ฌํ ํํ๋ฅผ ๋ณด์ด๊ธฐ ๋๋ฌธ์ ํ๋กํผํฐ๋ฅผ ์ถ๊ฐ, ์ญ์ , ์ด๋ํ๋ ๊ฒ ์ฌ์์ง๋๋ค.
๐ฅ ์์ ๊ฐ์ฒด๋ ์์ ๋ ์ ์์ต๋๋ค. ์ฃผ์ํ์ธ์. const
๋ก ์ ์ธ๋ ๊ฐ์ฒด๋ ์์ ๋ ์ ์์ต๋๋ค.
const user = {
name: "John"
};
user.name = "Pete"; // (*)
alert(user.name); // Pete
(*)
๋ก ํ์ํ ์ค์์ ์ค๋ฅ๋ฅผ ์ผ์ผํค๋ ๊ฒ์ฒ๋ผ ๋ณด์ผ ์ ์์ง๋ง ๊ทธ๋ ์ง ์์ต๋๋ค. const
๋ user
์ ๊ฐ์ ๊ณ ์ ํ์ง๋ง, ๊ทธ ๋ด์ฉ์ ๊ณ ์ ํ์ง ์์ต๋๋ค.
const
๋ user=...
๋ฅผ ์ ์ฒด์ ์ผ๋ก ์ค์ ํ๋ ค๊ณ ํ ๋๋ง ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
์ฌ๋ฌ ๋จ์ด๋ฅผ ์กฐํฉํด ํ๋กํผํฐ ํค๋ฅผ ๋ง๋ ๊ฒฝ์ฐ์, ์ ํ๊ธฐ๋ฒ์ ์ฌ์ฉํด ํ๋กํผํฐ ๊ฐ์ ์ฝ์ ์ ์์ต๋๋ค.
// ๋ฌธ๋ฒ ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค.
user.likes birds = true
์๋ฐ์คํฌ๋ฆฝํธ๋ ์์ ๊ฐ์ ์ฝ๋๋ฅผ ์ดํดํ์ง ๋ชปํฉ๋๋ค. user.likes
๊น์ง๋ ์ดํดํ๋ค๊ฐ ์์์น ๋ชปํ birds
๋ฅผ ๋ง๋๋ฉด ๋ฌธ๋ฒ ์๋ฌ๋ฅผ ๋ฑ์ด๋
๋๋ค.
"์ "์ ํค๊ฐ "์ ํจํ ๋ณ์ ์๋ณ์"์ธ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ ํจํ ๋ณ์ ์๋ณ์์ ๊ณต๋ฐฑ์ด ์์ด์ผ ํฉ๋๋ค. ๋ํ ์ซ์๋ก ์์ํ์ง ์์์ผ ํ๋ฉฐ $
์ _
๋ฅผ ์ ์ธํ ํน์ ๋ฌธ์๊ฐ ์์ด์ผ ํฉ๋๋ค.
ํค๊ฐ ์ ํจํ ๋ณ์ ์๋ณ์๊ฐ ์๋ ๊ฒฝ์ฐ์ ์ ํ๊ธฐ๋ฒ ๋์ ์ "๋๊ดํธ ํ๊ธฐ๋ฒ(square bracket notation)"์ด๋ผ ๋ถ๋ฆฌ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋๊ดํธ ํ๊ธฐ๋ฒ์ ํค์ ์ด๋ค ๋ฌธ์์ด์ด ์๋์ง ์๊ด์์ด ๋์ํฉ๋๋ค.
let user = {};
// set
user["likes birds"] = true;
// get
alert(user["likes birds"]); // true
// delete
delete user["likes birds"];
์ด์ ๋ฌธ๋ฒ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๋ค์. ๋๊ดํธ ํ๊ธฐ๋ฒ ์์์ ๋ฌธ์์ด์ ์ฌ์ฉํ ๋ ๋ฌธ์์ด์ ๋ฐ์ดํ๋ก ๋ฌถ์ด์ค์ผ ํ๋ค๋ ์ ์ ์ฃผ์ํ์๊ธฐ ๋ฐ๋๋๋ค. ๋ฐ์ดํ์ ์ข ๋ฅ๋ ์๊ด์์ต๋๋ค.
๋๊ดํธ ํ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ฉด ์๋ ์์์์ ๋ณ์๋ฅผ ํค๋ก ์ฌ์ฉํ ๊ฒ๊ณผ ๊ฐ์ด ๋ฌธ์์ด๋ฟ๋ง ์๋๋ผ ๋ชจ๋ ํํ์์ ํ๊ฐ ๊ฒฐ๊ณผ๋ฅผ ํ๋กํผํฐ ํค๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
let key = "likes birds";
// user["likes birds"] = true; ์ ๊ฐ์ต๋๋ค.
user[key] = true;
๋ณ์ key๋ ๋ฐํ์์ ํ๊ฐ๋๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์ ์ ๋ ฅ๊ฐ ๋ณ๊ฒฝ ๋ฑ์ ๋ฐ๋ผ ๊ฐ์ด ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค. ์ด๋ค ๊ฒฝ์ฐ๋ , ํ๊ฐ๊ฐ ๋๋ ์ดํ์ ๊ฒฐ๊ณผ๊ฐ ํ๋กํผํฐ ํค๋ก ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ฅผ ์์ฉํ๋ฉด ์ฝ๋๋ฅผ ์ ์ฐํ๊ฒ ์์ฑํ ์ ์์ต๋๋ค.
let user = {
name: "John",
age: 30
};
let key = prompt("์ฌ์ฉ์์ ์ด๋ค ์ ๋ณด๋ฅผ ์ป๊ณ ์ถ์ผ์ ๊ฐ์?", "name");
// ๋ณ์๋ก ์ ๊ทผ
alert( user[key] ); // John (ํ๋กฌํํธ ์ฐฝ์ "name"์ ์
๋ ฅํ ๊ฒฝ์ฐ)
๊ทธ๋ฐ๋ฐ ์ ํ๊ธฐ๋ฒ์ ์ด๋ฐ ๋ฐฉ์์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค.
let user = {
name: "John",
age: 30
};
let key = "name";
alert( user.key ) // undefined
๊ฐ์ฒด๋ฅผ ๋ง๋ค ๋ ๊ฐ์ฒด ๋ฆฌํฐ๋ด ์์ ํ๋กํผํฐ ํค๊ฐ ๋๊ดํธ๋ก ๋๋ฌ์ธ์ฌ ์๋ ๊ฒฝ์ฐ, ์ด๋ฅผ ๊ณ์ฐ๋ ํ๋กํผํฐ(computed property) ๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
let fruit = prompt("์ด๋ค ๊ณผ์ผ์ ๊ตฌ๋งคํ์๊ฒ ์ต๋๊น?", "apple");
let bag = {
[fruit]: 5, // ๋ณ์ fruit์์ ํ๋กํผํฐ ์ด๋ฆ์ ๋์ ์ผ๋ก ๋ฐ์ ์ต๋๋ค.
};
alert( bag.apple ); // fruit์ "apple"์ด ํ ๋น๋์๋ค๋ฉด, 5๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค.
์ ์์์์ [fruit]
๋ ํ๋กํผํฐ ์ด๋ฆ์ ๋ณ์ fruit
์์ ๊ฐ์ ธ์ค๊ฒ ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์ฌ์ฉ์๊ฐ ํ๋กฌํํธ ๋ํ์์์ apple
์ ์
๋ ฅํ๋ค๋ฉด bag
์ {apple: 5}
๊ฐ ํ ๋น๋์์ ๊ฒ๋๋ค.
์๋ ์์๋ ์ ์์์ ๋์ผํ๊ฒ ๋์ํฉ๋๋ค.
let fruit = prompt("์ด๋ค ๊ณผ์ผ์ ๊ตฌ๋งคํ์๊ฒ ์ต๋๊น?", "apple");
let bag = {};
// ๋ณ์ fruit์ ์ฌ์ฉํด ํ๋กํผํฐ ์ด๋ฆ์ ๋ง๋ค์์ต๋๋ค.
bag[fruit] = 5;
๋ ๋ฐฉ์ ์ค ๊ณ์ฐ๋ ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํ ์์๊ฐ ๋ ๊น๋ํด ๋ณด์ด๋ค์.
ํํธ, ๋ค์ ์์์ฒ๋ผ ๋๊ดํธ ์์๋ ๋ณต์กํ ํํ์์ด ์ฌ ์๋ ์์ต๋๋ค.
let fruit = "apple";
let bag = {
[fruit + "Computers"]: 5 // bag.appleComputers = 5
};
๋๊ดํธ ํ๊ธฐ๋ฒ์ ํ๋กํผํฐ ์ด๋ฆ๊ณผ ๊ฐ์ ์ ์ฝ์ ์์ ์ฃผ๊ธฐ ๋๋ฌธ์ ์ ํ๊ธฐ๋ฒ๋ณด๋ค ํจ์ฌ ๊ฐ๋ ฅํฉ๋๋ค. ๊ทธ๋ฐ๋ฐ ์์ฑํ๊ธฐ ๋ฒ๊ฑฐ๋กญ๋ค๋ ๋จ์ ์ด ์์ต๋๋ค.
์ด๋ฐ ์ด์ ๋ก ํ๋กํผํฐ ์ด๋ฆ์ด ํ์ ๋ ์ํฉ์ด๊ณ , ๋จ์ํ ์ด๋ฆ์ด๋ผ๋ฉด ์ฒ์์ ์ ํ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ค๊ฐ ๋ญ๊ฐ ๋ณต์กํ ์ํฉ์ด ๋ฐ์ํ์ ๋ ๋๊ดํธ ํ๊ธฐ๋ฒ์ผ๋ก ๋ฐ๊พธ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
์ค๋ฌด์์ ํ๋กํผํฐ ๊ฐ์ ๊ธฐ์กด ๋ณ์์์ ๋ฐ์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ์ข ์ข ์์ต๋๋ค.
function makeUser(name, age) {
return {
name: name,
age: age,
// ...๋ฑ๋ฑ
};
}
let user = makeUser("John", 30);
alert(user.name); // John
์ ์์์ ํ๋กํผํฐ๋ค์ ์ด๋ฆ๊ณผ ๊ฐ์ด ๋ณ์์ ์ด๋ฆ๊ณผ ๋์ผํ๋ค์. ์ด๋ ๊ฒ ๋ณ์๋ฅผ ์ฌ์ฉํด ํ๋กํผํฐ๋ฅผ ๋ง๋๋ ๊ฒฝ์ฐ๋ ์์ฃผ ํํ๋ฐ, ํ๋กํผํฐ ๊ฐ ๋จ์ถ ๊ตฌ๋ฌธ(property value shorthand) ์ ์ฌ์ฉํ๋ฉด ์ฝ๋๋ฅผ ์งง๊ฒ ์ค์ผ ์ ์์ต๋๋ค.
name:name
๋์ name
๋ง ์ ์ด์ฃผ์ด๋ ํ๋กํผํฐ๋ฅผ ์ค์ ํ ์ ์์ฃ .
function makeUser(name, age) {
return {
name, // name: name ๊ณผ ๊ฐ์
age, // age: age ์ ๊ฐ์
// ...
};
}
ํ ๊ฐ์ฒด์์ ์ผ๋ฐ ํ๋กํผํฐ์ ๋จ์ถ ํ๋กํผํฐ๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค.
let user = {
name, // name: name ๊ณผ ๊ฐ์
age: 30
};
์์๋ค์ํผ ๋ณ์ ์ด๋ฆ(ํค)์ for
, let
, return
๊ฐ์ ์์ฝ์ด๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ฉ๋๋ค.
๊ทธ๋ฐ๋ฐ ๊ฐ์ฒด ํ๋กํผํฐ์ ์ด๋ฐ ์ ์ฝ์ด ์์ต๋๋ค.
// ์์ฝ์ด๋ฅผ ํค๋ก ์ฌ์ฉํด๋ ๊ด์ฐฎ์ต๋๋ค.
let obj = {
for: 1,
let: 2,
return: 3
};
alert( obj.for + obj.let + obj.return ); // 6
์ด์ ๊ฐ์ด ํ๋กํผํฐ ์ด๋ฆ์ ํน๋ณํ ์ ์ฝ์ด ์์ต๋๋ค. ์ด๋ค ๋ฌธ์ํ, ์ฌ๋ณผํ ๊ฐ๋ ํ๋กํผํฐ ํค๊ฐ ๋ ์ ์์ฃ .
๋ฌธ์ํ์ด๋ ์ฌ๋ณผํ์ ์ํ์ง ์์ ๊ฐ์ ๋ฌธ์์ด๋ก ์๋ ํ ๋ณํ๋ฉ๋๋ค.
์์๋ฅผ ์ดํด๋ด
์๋ค. ํค์ ์ซ์ 0
์ ๋ฃ์ผ๋ฉด ๋ฌธ์์ด "0"
์ผ๋ก ์๋๋ณํ๋ฉ๋๋ค.
let obj = {
0: "test" // "0": "test"์ ๋์ผํฉ๋๋ค.
};
// ์ซ์ 0์ ๋ฌธ์์ด "0"์ผ๋ก ๋ณํ๋๊ธฐ ๋๋ฌธ์ ๋ ์ผ๋ฟ ์ฐฝ์ ๊ฐ์ ํ๋กํผํฐ์ ์ ๊ทผํฉ๋๋ค,
alert( obj["0"] ); // test
alert( obj[0] ); // test (๋์ผํ ํ๋กํผํฐ)
์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด์ ์ค์ํ ํน์ง ์ค ํ๋๋ ๋ค๋ฅธ ์ธ์ด์๋ ๋ฌ๋ฆฌ, ์กด์ฌํ์ง ์๋ ํ๋กํผํฐ์ ์ ๊ทผํ๋ ค ํด๋ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๊ณ undefined
๋ฅผ ๋ฐํํ๋ค๋ ๊ฒ์
๋๋ค.
์ด๋ฐ ํน์ง์ ์์ฉํ๋ฉด ํ๋กํผํฐ ์กด์ฌ ์ฌ๋ถ๋ฅผ ์ฝ๊ฒ ํ์ธํ ์ ์์ต๋๋ค.
let user = {};
alert( user.noSuchProperty === undefined ); // true๋ "ํ๋กํผํฐ๊ฐ ์กด์ฌํ์ง ์์"์ ์๋ฏธํฉ๋๋ค.
์ด๋ ๊ฒ undefined
์ ๋น๊ตํ๋ ๊ฒ ์ด์ธ์๋ ์ฐ์ฐ์ in
์ ์ฌ์ฉํ๋ฉด ํ๋กํผํฐ ์กด์ฌ ์ฌ๋ถ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
let user = { name: "John", age: 30 };
alert( "age" in user ); // user.age๊ฐ ์กด์ฌํ๋ฏ๋ก true๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค.
alert( "blabla" in user ); // user.blabla๋ ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ false๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค.
in
์ผ์ชฝ์ ๋ฐ๋์ ํ๋กํผํฐ ์ด๋ฆ์ด ์์ผ ํฉ๋๋ค. ํ๋กํผํฐ ์ด๋ฆ์ ๋ณดํต ๋ฐ์ดํ๋ก ๊ฐ์ผ ๋ฌธ์์ด์
๋๋ค.
๋ฐ์ดํ๋ฅผ ์๋ตํ๋ฉด ์๋ ์์์ ๊ฐ์ด ์๋ฑํ ๋ณ์๊ฐ ์กฐ์ฌ ๋์์ด ๋ฉ๋๋ค.
let user = { age: 30 };
let key = "age";
alert( key in user ); // true, ๋ณ์ key์ ์ ์ฅ๋ ๊ฐ("age")์ ์ฌ์ฉํด ํ๋กํผํฐ ์กด์ฌ ์ฌ๋ถ๋ฅผ ํ์ธํฉ๋๋ค.
๊ทธ๋ฐ๋ฐ ์ด์ฏค ๋๋ฉด "undefined
๋ ๋น๊ตํด๋ ์ถฉ๋ถํ๋ฐ ์ in
์ฐ์ฐ์๊ฐ ์๋ ๊ฑฐ์ง?"๋ผ๋ ์๋ฌธ์ด ๋ค ์ ์์ต๋๋ค.
๋๋ถ๋ถ์ ๊ฒฝ์ฐ, ์ผ์น ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด์ ํ๋กํผํฐ ์กด์ฌ ์ฌ๋ถ๋ฅผ ์์๋ด๋ ๋ฐฉ๋ฒ์ ๊ฝค ์ ๋์ํฉ๋๋ค. ๊ทธ๋ฐ๋ฐ ๊ฐ๋์ ์ด ๋ฐฉ๋ฒ์ด ์คํจํ ๋๋ ์์ต๋๋ค. ์ด๋ด ๋ in
์ ์ฌ์ฉํ๋ฉด ํ๋กํผํฐ ์กด์ฌ ์ฌ๋ถ๋ฅผ ์ ๋๋ก ํ๋ณํ ์ ์์ต๋๋ค.
ํ๋กํผํฐ๋ ์กด์ฌํ๋๋ฐ, ๊ฐ์ undefined
๋ฅผ ํ ๋นํ ์์๋ฅผ ์ดํด๋ด
์๋ค.
let obj = {
test: undefined
};
alert( obj.test ); // ๊ฐ์ด `undefined`์ด๋ฏ๋ก, ์ผ๋ฟ ์ฐฝ์ undefined๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค. ๊ทธ๋ฐ๋ฐ ํ๋กํผํฐ test๋ ์กด์ฌํฉ๋๋ค.
alert( "test" in obj ); // `in`์ ์ฌ์ฉํ๋ฉด ํ๋กํผํฐ ์ ๋ฌด๋ฅผ ์ ๋๋ก ํ์ธํ ์ ์์ต๋๋ค(true๊ฐ ์ถ๋ ฅ๋จ).
obj.test
๋ ์ค์ ์กด์ฌํ๋ ํ๋กํผํฐ์
๋๋ค. ๋ฐ๋ผ์ in
์ฐ์ฐ์๋ ์ ์์ ์ผ๋ก true
๋ฅผ ๋ฐํํฉ๋๋ค.
undefined
๋ ๋ณ์๋ ์ ์๋์ด ์์ผ๋ ๊ฐ์ด ํ ๋น๋์ง ์์ ๊ฒฝ์ฐ์ ์ฐ๊ธฐ ๋๋ฌธ์ ํ๋กํผํฐ ๊ฐ์ด undefined
์ธ ๊ฒฝ์ฐ๋ ํ์น ์์ต๋๋ค. ๊ฐ์ "์ ์ ์๊ฑฐ๋(unknown)" ๊ฐ์ด "๋น์ด ์๋ค๋(empty)" ๊ฒ์ ๋ํ๋ผ ๋๋ ์ฃผ๋ก null
์ ์ฌ์ฉํฉ๋๋ค. ์ ์์์์ in
์ฐ์ฐ์๋ ์๋ฆฌ์ ์ด์ธ๋ฆฌ์ง ์๋ ์ด๋์๋์ฒ๋ผ ๋ณด์ด๋ค์.
for...in
๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ๋ฉด ๊ฐ์ฒด์ ๋ชจ๋ ํค๋ฅผ ์ํํ ์ ์์ต๋๋ค. for...in
์ ์์ ํ์ตํ๋ for(;;)
๋ฐ๋ณต๋ฌธ๊ณผ๋ ์์ ํ ๋ค๋ฆ
๋๋ค.
for (key in object) {
// ๊ฐ ํ๋กํผํฐ ํค(key)๋ฅผ ์ด์ฉํ์ฌ ๋ณธ๋ฌธ(body)์ ์คํํฉ๋๋ค.
}
์๋ ์์๋ฅผ ์คํํ๋ฉด ๊ฐ์ฒด user์ ๋ชจ๋ ํ๋กํผํฐ๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค.
let user = {
name: "John",
age: 30,
isAdmin: true
};
for (let key in user) {
// ํค
alert( key ); // name, age, isAdmin
// ํค์ ํด๋นํ๋ ๊ฐ
alert( user[key] ); // John, 30, true
}
for...in
๋ฐ๋ณต๋ฌธ์์๋ for(;;)
๋ฌธ์ฒ๋ผ ๋ฐ๋ณต ๋ณ์(looping variable)๋ฅผ ์ ์ธํ๋ค๋ ์ ์ ์ฃผ๋ชฉํด ์ฃผ์๊ธฐ ๋ฐ๋๋๋ค.
๋ฐ๋ณต ๋ณ์๋ช
์ ์์ ๋กญ๊ฒ ์ ํ ์ ์์ต๋๋ค. for (let prop in obj)
๊ฐ์ด key
๋ง๊ณ ๋ค๋ฅธ ๋ณ์๋ช
์ ์ฌ์ฉํด๋ ๊ด์ฐฎ์ต๋๋ค.
๊ฐ์ฒด์ ๊ฐ์ฒด ํ๋กํผํฐ๋ฅผ ๋ค๋ฃจ๋ค ๋ณด๋ฉด "ํ๋กํผํฐ์ ์์๊ฐ ์์๊น?"๋ผ๋ ์๋ฌธ์ด ์๊ธฐ๊ธฐ ๋ง๋ จ์ ๋๋ค. ๋ฐ๋ณต๋ฌธ์ ํ๋กํผํฐ๋ฅผ ์ถ๊ฐํ ์์๋๋ก ์คํ๋ ์ง, ๊ทธ๋ฆฌ๊ณ ์ด ์์๋ ํญ์ ๋์ผํ ์ง ๊ถ๊ธํด์ง์ฃ .
๋ต์ ๊ฐ๋จํฉ๋๋ค. ๊ฐ์ฒด๋ "ํน๋ณํ ๋ฐฉ์์ผ๋ก ์ ๋ ฌ"๋ฉ๋๋ค. ์ ์ ํ๋กํผํฐ(integer property)๋ ์๋์ผ๋ก ์ ๋ ฌ๋๊ณ , ๊ทธ ์ธ์ ํ๋กํผํฐ๋ ๊ฐ์ฒด์ ์ถ๊ฐํ ์์ ๊ทธ๋๋ก ์ ๋ ฌ๋ฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ์์ ๋ฅผ ํตํด ์ดํด๋ด ์๋ค.
์๋ ๊ฐ์ฒด์ ๊ตญ์ ์ ํ ๋๋ผ ๋ฒํธ๊ฐ ๋ด๊ฒจ์์ต๋๋ค.
let codes = {
"49": "๋
์ผ",
"41": "์ค์์ค",
"44": "์๊ตญ",
// ...,
"1": "๋ฏธ๊ตญ"
};
for (let code in codes) {
alert(code); // 1, 41, 44, 49
}
ํ์ฌ ๊ฐ๋ฐ ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฃผ ์ฌ์ฉ์๊ฐ ๋ ์ผ์ธ์ด๋ผ๊ณ ๊ฐ์ ํด ๋ด ์๋ค. ๋๋ผ ๋ฒํธ๋ฅผ ์ ํํ๋ ํ๋ฉด์์ ๋ ์ผ(49)์ด ๋งจ ์์ ์ค๋๋ก ํ๋ ๊ฒ ์ข์ ๊ฒ๋๋ค.
๊ทธ๋ฐ๋ฐ ์ฝ๋๋ฅผ ์คํํด ๋ณด๋ฉด ์์๊ณผ๋ ์ ํ ๋ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค.
๋ฏธ๊ตญ(1)์ด ์ฒซ ๋ฒ์งธ๋ก ์ถ๋ ฅ๋ฉ๋๋ค. ๊ทธ ๋ค๋ก ์ค์์ค(41), ์๊ตญ(44), ๋ ์ผ(49)์ด ์ฐจ๋ก๋๋ก ์ถ๋ ฅ๋ฉ๋๋ค. ์ด์ ๋ ๋๋ผ ๋ฒํธ(ํค)๊ฐ ์ ์์ด์ด์ 1, 41, 44, 49 ์์ผ๋ก ํ๋กํผํฐ๊ฐ ์๋ ์ ๋ ฌ๋์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๐ฅ ์ ์ ํ๋กํผํฐ? ๊ทธ๊ฒ ๋ญ๊ฐ์?
"์ ์ ํ๋กํผํฐ"๋ผ๋ ์ฉ์ด๋ ๋ณํ ์์ด ์ ์์์ ์๋ค ๊ฐ๋ค ํ ์ ์๋ ๋ฌธ์์ด์ ์๋ฏธํฉ๋๋ค.
๋ฌธ์์ด "49"
๋ ์ ์๋ก ๋ณํํ๊ฑฐ๋ ๋ณํํ ์ ์๋ฅผ ๋ค์ ๋ฌธ์์ด๋ก ๋ฐ๊ฟ๋ ๋ณํ์ด ์๊ธฐ ๋๋ฌธ์ ์ ์ ํ๋กํผํฐ์
๋๋ค. ํ์ง๋ง "+49"
์ "1.2"
๋ ์ ์ ํ๋กํผํฐ๊ฐ ์๋๋๋ค.
// ํจ์ Math.trunc๋ ์์์ ์๋๋ฅผ ๋ฒ๋ฆฌ๊ณ ์ซ์์ ์ ์๋ถ๋ง ๋ฐํํฉ๋๋ค.
alert( String(Math.trunc(Number("49"))) ); // "49"๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค. ๊ธฐ์กด์ ์
๋ ฅํ ๊ฐ๊ณผ ๊ฐ์ผ๋ฏ๋ก ์ ์ ํ๋กํผํฐ์
๋๋ค.
alert( String(Math.trunc(Number("+49"))) ); // "49"๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค. ๊ธฐ์กด์ ์
๋ ฅํ ๊ฐ(+49)๊ณผ ๋ค๋ฅด๋ฏ๋ก ์ ์ ํ๋กํผํฐ๊ฐ ์๋๋๋ค.
alert( String(Math.trunc(Number("1.2"))) ); // "1"์ด ์ถ๋ ฅ๋ฉ๋๋ค. ๊ธฐ์กด์ ์
๋ ฅํ ๊ฐ(1.2)๊ณผ ๋ค๋ฅด๋ฏ๋ก ์ ์ ํ๋กํผํฐ๊ฐ ์๋๋๋ค.
ํํธ, ํค๊ฐ ์ ์๊ฐ ์๋ ๊ฒฝ์ฐ์ ์์ฑ๋ ์์๋๋ก ํ๋กํผํฐ๊ฐ ๋์ด๋ฉ๋๋ค.
let user = {
name: "John",
surname: "Smith"
};
user.age = 25; // ํ๋กํผํฐ๋ฅผ ํ๋ ์ถ๊ฐํฉ๋๋ค.
// ์ ์ ํ๋กํผํฐ๊ฐ ์๋ ํ๋กํผํฐ๋ ์ถ๊ฐ๋ ์์๋๋ก ๋์ด๋ฉ๋๋ค.
for (let prop in user) {
alert( prop ); // name, surname, age
}
์ ์์์์ ๋
์ผ(49์ ๊ฐ์ฅ ์์ ์ถ๋ ฅ๋๋๋ก ํ๋ ค๋ฉด ๋๋ผ ๋ฒํธ๊ฐ ์ ์๋ก ์ทจ๊ธ๋์ง ์๋๋ก ์์์๋ฅผ ์ฐ๋ฉด ๋ฉ๋๋ค. ๊ฐ ๋๋ผ ๋ฒํธ ์์ "+"
๋ฅผ ๋ถ์ฌ๋ด
์๋ค.
let codes = {
"+49": "๋
์ผ",
"+41": "์ค์์ค",
"+44": "์๊ตญ",
// ..,
"+1": "๋ฏธ๊ตญ"
};
for (let code in codes) {
alert( +code ); // 49, 41, 44, 1
}
์ด์ ์ํ๋ ๋๋ก ๋ ์ผ ๋๋ผ ๋ฒํธ๊ฐ ๊ฐ์ฅ ๋จผ์ ์ถ๋ ฅ๋๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.