Primitive type์ ๋ณ์ ํ๋๋น ๊ฐ์ ํ๋๋ง ๋ด์ ์ ์๋ค.
const name = "solmi";
const age = 26;
print(name, age);
function print(name,age) {
๋์ถฉ ํจ์
}
๊ทธ๋์ ์ด๋ ๊ฒ ์ด๋ฆ๊ณผ ๋์ด๋ฅผ ์ถ๋ ฅํ๋ ค๋ฉด ์ด๋ฆ๊ณผ ๋์ด๋ฅผ ๊ฐ๊ฐ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌํด์ผ ํ๊ณ , ํจ์๋ ๊ทธ๋งํผ ๊ธธ์ด์ง๋ค.
โ ๊ด๋ฆฌ๋ ํ๋ค๊ณ ๊ฐ๋ ์ฑ๋ ์ข์ง ์๋ค! ๊ทธ๋์ ์ฌ์ฉ๋๋๊ฒ์ด ๋ฐ๋ก Object!!
object๋ { key : value } ๋ก ๊ตฌ์ฑ๋์ด์ง๋ค!
const solmi = { name: "solmi", age: 26 };
print(solmi);
{ }
๋ฅผ ์ด์ฉํด object๋ฅผ ์ ์ํ๋ ๊ฒ์ ๋งํ๋ค.
dot notation .
์ผ๋ก ์์ฑ๊ฐ์ ์ ๊ทผํ ์ ์๋ค.
Javascript๋ dynamic typed language์ด๋ค.
๊ทธ๋์ ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์๋ ์ผ๋ฐ์ ์ด์ง ์์ ๋ค์ํ ์ํฉ์ด ์ผ์ด๋๋ค.
ํ ์๋ก, object๋ฅผ ์ ์ํ ํ์ ๋ค๋ฅธ ๊ฐ์ ๋ค๋ฆ๊ฒ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ ์๋ ์๋ค!
solmi.likeChicken = true;
โ solmi object๋ฅผ ์ถ๋ ฅํ๋ฉด solmi, 26, true ๊ฐ ์ถ๋ ฅ๋๋ค.
delete solmi.age;
โ solmi object๋ฅผ ์ถ๋ ฅํ๋ฉด solmi, true ๊ฐ ์ถ๋ ฅ๋๋ค.
๐๐ปโโ๏ธ trailing comm
๋ง ๊ทธ๋๋ก ์ฝค๋ง,
๋ฅผ ๋ง์ง๋ง์ ๋ถ์ด๋๊ฑธ ์๋ฏธํ๋ค.
๋ค๋ฅธ ์ธ์ด๋ ์๋ฌ๊ฐ ๋จ๊ฒ ์ง๋ง JavaScript์์๋ ๊ฐ๋ฅํ๋ค.
object์ property ์์๋ฅผ ๋ฐ๊ฟ ๋ ์ ์ฉํ์ง๋ง, ์ฌ์ฉํ๊ณ ์ํ๊ณ ๋ ์ทจํฅ์ ์ฐจ์ด์ด๋ค.
๊ฐ์ฅ ์ค์ํ๊ฑด ํ์ ์์ ์ฝ๋ฉ ์ปจ๋ฒค์ ์ด๋ ์ฝ๋์ ํต์ผ์ฑ์ ์งํค๋ ๊ฒ์ด๋ค.
const solmi = new Object();
new
ํค์๋์ ํจ๊ป ์ฌ์ฉํ๋ ํจ์๋ฅผ ์์ฑ์(constructor)๋ผ๊ณ ๋ถ๋ฅธ๋ค.
solmi.name; // ์ด๋ ๊ฒ ํธ์ถํ๊ฑฐ๋
solmi["name"]; // ์ด๋ ๊ฒ ํธ์ถ ๊ฐ๋ฅ!
Object.keys(solmi); // solmi ์ค๋ธ์ ํธ์ key ๊ฐ๋ง ๊ฐ์ ธ์ค๊ธฐ
Object.Values(solmi); // solmi ์ค๋ธ์ ํธ์ value ๊ฐ๋ง ๊ฐ์ ธ์ค๊ธฐ
[solmi.name;](http://solmi.name)
์ด ํจ์ฌ ํธํ ๊ฒ ๊ฐ์๋ฐ, [ ] ๋ ์ธ์ ์ธ๊น?
[ ] ์์๋ ๋ณ์๊ฐ ๋ค์ด๊ฐ ์ ์๋ค!let plan1 = { name: "Basic" }; let propertyName = "name"; console.log(plan1[propertyName]); // Basic
โ ๋ณ์๋ฅผ ์ ์ธํด์ name์ด๋ผ๋ property์ ์ด๋ ๊ฒ ์ ๊ทผํ ์๋ ์๋ค.
const solmi = { name: "solmi", "a-2": 1234, " ": 5678 };
console.log(solmi.name); // solmi
console.log(solmi["name"]); // solmi
console.log(solmi[name]); // undefined
console.log(solmi.a-2); // NaN
console.log(solmi."a-2"); // error
console.log(solmi["a-2"]); // 1234
console.log(solmi[" "]); // 5678
object ์์ ์๋ ๊ฐ์ ์ ๊ทผํ ๋๋ .
์ ์ด์ฉํ๋๋ฐ, [" "]
์ ์ด์ฉํด์ string ํํ๋ก๋ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
์๋ฅผ ๋ค์ด "a-2"
, "123"
, " "
๊ฐ์ propertie๋ .
์ผ๋ก ์ ๋ฌํ ๊ฒฝ์ฐ undefined
ํน์ error
๊ฐ ๋ฐ์ํ ์ ์๋ค.
์ด ๋ object["key"]
๋ฅผ ์ด์ฉํ๋ฉด ๊ฐ์ฒด์ ์์ฑ๊ฐ์ด " "์ผ๋ก ๊ฐ์ธ์ง ๋ฌธ์์ด์ด๊ธฐ์ ์ ์์ ์ผ๋ก ์ถ๋ ฅ์ด ๊ฐ๋ฅํ๋ค.
object ["key"]๋ฅผ ์ด์ฉํด์๋ ๋ค๋ฆ๊ฒ ์ถ๊ฐ, ์ญ์ ๊ฐ ๊ฐ๋ฅํ๋ค.
solmi["longHair"] = true;
delete solmi["name"];
.
: ์ฝ๋ฉํ๋ ๊ทธ ์๊ฐ, Key์ ์ ํํ ํด๋นํ๋ vlaue๋ฅผ ๋ฐ์์ค๊ณ ์ถ์๋ ์ฌ์ฉ โ ํ์์๋ .
์ ์ฌ์ฉ[ ]
: ์ ํํ๊ฒ ์ด๋ค key๊ฐ ํ์ํ์ง ๋ชจ๋ฅผ ๋, ์ฆ vlaue๊ฐ ๋ฐํ์์์ ๊ฒฐ์ ๋ ๋ ์ฌ์ฉfunction printValue(obj, key) { // key : ์ฌ์ฉ์์๊ฒ input์ผ๋ก ์ ๋ฌ๋ฐ์ ์ ๋ณด(์์ง ์ด๋ค ์ ๋ณด์ธ์ง๋ ๋ชจ๋ฆ)
console.log(obj.key); // undefuned
console.log(obj[key]; // solmi
}
printValue(solmi, "name");
์๋ฅผ ๋ค์ด, ์ ํจ์์์ key
๋ ์ฌ์ฉ์์๊ฒ ์ ๋ฌ๋ฐ์ ์์ ์ธ ์ ๋ณด๋ผ๋ฉด, ๋น์ฅ ์ง๊ธ์ ์ ํด์ง value๊ฐ ์๊ฒ ๋๋ค!
์ด ๋, obj.[key]
๋ก ์์ฑํ๋ฉด ๋์ค์ ๊ฐ์ด ๋ค์ด์ค๊ฒ๋๋ฉด key์ ์์ฑ๊ฐ์ด ๊ฐ์ด ์ถ๋ ฅ๋๋ค!
๋ง์ด ์ฐ์ด๋ ๊ฐ์ฒด ๊ตฌ์กฐ! ๊ฐ์ฒด์ ๊ฐ์ฒด์ ๋ฐฐ์ด์ ๊ฐ์ฒด.....๐คช?
let objData = { name: 50, address: { email: "gaebal@gmail.com", home: "์์ํฌ ์ ๋ฆ2ํธ์ " }, books: { year: [2019, 2018, 2006], info: [{ name: "JS Guide", price: 9000 }, { name: "HTML Guide", price: 19000, author: "Kim, gae bal" }] } }; let bookName = objData.books.info[1].name; // bookName๋ณ์๋ objData๊ฐ์ฒด ์์ books๋ผ๋ ๊ฐ์ฒด ์์ info ๋ฐฐ์ด์ 1๋ฒ index์์น์ธ ๊ฐ์ฒด ์์ name property! console.log(bookName); // HTML Guide
const name = "What's your name?", age = "How old are you?";
const person1 = { name: "What's your name?", age: "How old are you?" };
const person2 = { name, age };
๋จ์ถ ์์ฑ๋ช ์ key ๊ฐ๊ณผ vlaue์ ๊ฐ์ด ๊ฐ์ผ๋ฉด, key, value์ ๊ฐ์ ๊ฐ๊ฐ ํ๊ธฐํ์ง ์๊ณ ํ๋ฒ๋ง ํ๊ธฐํ๋๊ฒ์ ๋งํ๋ค.
person2
๋ { name, age }
๋ง ์
๋ ฅํ์ง๋ง, ์ฌ์ค์ { name: name, age: age }
์ธ๊ฒ! (์ฝ์์ฐฝ์ ๋ณด๋ฉด ์ ์ ์๋ค!)
function Person(name, age) { // object๋ฅผ ์์ฑํ๋ ํจ์๋ ๋ณ์์ ๋ค๋ฅด๊ฒ ๋๋ฌธ์๋ก ์์ํ๋๊ฒ ๊ด๋ก
// ์ฌ์ค์ this = {}; ๊ฐ ์๋ต๋๊ฒ
this.name = name;
this.age = age;
// ์ฌ์ค์ return this; ์ด ์๋ต๋๊ฒ
}
const solmi = new Person("solmi", 26);
Class๋ ์๋กญ๊ฒ ์ถ๊ฐ๋ ๊ธฐ๋ฅ์ด ์๋, ๊ธฐ์กด์ ์กด์ฌํ๋ ํ๋กํ ํ์ ์ ๊ธฐ๋ฐ์ผ๋ก OOP์ ์น์ํ ๋ชจ์์ผ๋ก ๋ฌธ๋ฒ๋ง ๋ฐ๋ syntactic sugar ๋ผ๊ณ ๋งํ์๋๋ฐ, Constuctor function๊ณผ prototypal inheritance๊ฐ ๊ทธ ํ๋กํ ํ์ ์ ํด๋นํ๋ค.
class๊ฐ ๋์ค๊ธฐ ์ ์ ๋ง์ด ์ฌ์ฉํ๋ ๋ฐฉ์์ด๋ฉฐ, ๋ค๋ฅธ ๊ณ์ฐ์ ํ์ง ์๊ณ ์์ํ๊ฒ object๋ง ์์ฑํ๋ ํจ์๊ฐ ๋๋ค.
class๋ Constuctor function๋ฑ์ ๊ฒ๋ณด๊ธฐ์๋ง ๋ค๋ฅผ๋ฟ, ์ค์ ๋ท๋จ์์ ๋์๊ฐ๋๊ฒ์ ๋๊ฐ๋ค.
(prototypal inheritance๋ ๋ค์์ ์ ๋ฆฌ...)
console.log("name" in solmi); // true
console.log("job" in solmi); // false
console.log(solmi.job); // undefined
object์์ ํด๋น key๊ฐ ์๋์ง ๊ฐ๋จํ๊ฒ ํ์ธํ๋ ํค์๋
const user = { name: "solmi", age: "26" };
const user2 = user;
โ user2 = user
๊ฐ์ ํ์ ํ ๋ฐฉ๋ฒ ๋ง๊ณ object๋ฅผ ๊ทธ๋๋ก ๋ณต์ฌํ๋ ๋ฐฉ๋ฒ์ ์ด๋ค๊ฒ๋ค์ด ์์๊น??
์๋ st
const user3 = {}; // ๋น ๋ฐฐ์ด ์์ฑ for (key in user) { user3[key] = user[key]; }
๋น user3 ์์ ๋ณต์ฌํ๊ณ ์ ํ๋ user์ ๊ฐ์ for..in์ผ๋ก ๊ณ์ ์ฒ์๋ถํฐ ๋๊น์ง ๋ฐ๋ณตํด์ ๋ฃ์ด์ฃผ๊ธฐ
์์ฆ st
const user4 = {}; // ๋น ๋ฐฐ์ด ์์ฑ Object.assign(user4, user);
const user4 = Object.assign({}, user); // ์ด๋ ๊ฒ ํ์ค๋ก๋ ์์ฑ ๊ฐ๋ฅ ( ์ ์ฝ๋์ ๊ฐ์ ๋ด์ฉ)
Object.assign(target, source)
: ์ด๊ฑฐํ ์ ์๋ ํ๋ ์ด์์ ์ถ์ฒ ๊ฐ์ฒด๋ก๋ถํฐ ๋์ ๊ฐ์ฒด๋ก ์์ฑ์ ๋ณต์ฌํ ๋ ์ฌ์ฉํ๊ณ , ๋์ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค.
์ด๊ฑด MDN ๊ณต์ ์ค๋ช ์ด๊ณ , ์ฝ๊ฒ ๋งํ๋ฉด ๊ฐ์ฒด ๋ณํฉ์ด๋ค.
user์ ๋ณต์ฌํ์ฌ user4์ ๋ถ์ฌ๋ฃ์๊ฒ ๊ฐ์ง๋ง, ์ฌ์ค์ user์ user4๊ฐ ๋ณํฉ๋๊ฒ์ด๋ฉฐ, ๋ณํฉ๋ ๋์์ธ user4๊ฐ ๋ฐํ๋๊ฒ!
๊ทธ๋ ๊ธฐ์ ๋ณต์ฌ๋ก ์ฌ์ฉํ๊ณ ์ถ์ผ๋ฉด ๋ฐ๋์ ๋น ๋ฐฐ์ด์ ์์ฑํด์ค์ผ ํ๋ค!
๋, ๊ฐ์ฒด ๋ณต์ฌ๊ฐ ์๋๋ผ ๊ฐ์ฒด ๋ณํฉ์ธ ์ด์ ๋,const fruit1 = { color: "red" }; const fruit2 = { color: "blue", aize: "big" } const mixed = Object.assign({}, fruit1, fruit2); // mixed์ color: blue, size: big ์ถ๋ ฅ
์ด ์์๋ฅผ ๋ณด๋ฉด ์ ์ ์๋ค!
๋ค์ ๋์จ ๊ฐ์ฒด (fruit2
) ์ผ์๋ก, ์์ ๋์ผํ ํ๋กํผํฐ๊ฐ ์๋ค๋ฉด ๊ทธ ๊ฐ์ ๋ฎ์ด์์ ๋ฒ๋ฆฐ๋ค.