Object - wooyeonhui/Yeonny GitHub Wiki
### ๊ฐ์ฒด(Object)๋? ์๋ฐ์คํฌ๋ฆฝํธ๋ ๊ฐ์ฒด(object)๊ธฐ๋ฐ์ ์คํฌ๋ฆฝํธ ์ธ์ด์ด๋ฉฐ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด๋ฃจ๊ณ ์๋ ๊ฑฐ์ โ๋ชจ๋ ๊ฒโ์ ๊ฐ์ฒด์ด๋ค. ๊ธฐ๋ณธ์๋ฃํ(Primitives)์ ์ ์ธํ ๋๋จธ์ง ๊ฐ๋ค(ํจ์, ๋ฐฐ์ด, ์ ๊ทํํ์ ๋ฑ)์ ๋ชจ๋ ๊ฐ์ฒด์ด๋ค.
๊ฐ์ฒด๋ ๋ฐ์ดํฐ์ ๊ทธ ๋ฐ์ดํฐ์ ๊ด๋ จ๋๋ ๋์(์ ์ฐจ, ๋ฐฉ๋ฒ, ๊ธฐ๋ฅ)์ ๋ชจ๋ ํฌํจํ ์ ์๋ ๊ฐ๋ ์ ์กด์ฌ์ด๋ค. ๋ฌ๋ฆฌ ๋งํด, ์ด๋ฆ(ํค)๊ณผ ๊ฐ์ผ๋ก ๊ตฌ์ฑ๋ ๋ฐ์ดํฐ๋ฅผ ์๋ฏธํ๋ ํ๋กํผํฐ(property)์ ๋์์ ๋ํ๋ด๋ ๋ฉ์๋(method)๋ฅผ ํฌํจํ๊ณ ์๋ ๋ ๋ฆฝ์ ์ฃผ์ฒด์ด๋ค.
๊ฐ์ฒด๋ ๋ฐ์ดํฐ๋ฅผ ํ ๊ณณ์ ๋ชจ์ผ๊ณ ๊ตฌ์กฐํํ๋๋ฐ ์ ์ฉํ๋ค. ๊ฐ์ฒด ํ๋๋ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ํฌํจํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ทธ๋ํ๋ ํธ๋ฆฌ์ ๊ฐ์ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฝ๊ฒ ํํํ ์ ์๋ค.
### ํ๋กํผํฐ(Property) ๊ฐ์ฒด๋ ์ด๋ฆ(name)๊ณผ ๊ฐ(value)์ ์์ธ ํ๋กํผํฐ๋ค์ ํฌํจํ๋ ์ปจํ ์ด๋๋ผ๊ณ ํ ์ ์๋ค. ํ๋กํผํฐ๋ ํ๋กํผํฐ ์ด๋ฆ๊ณผ ํ๋กํผํฐ ๊ฐ์ผ๋ก ๊ตฌ์ฑ๋๋ค. ํ๋กํผํฐ ์ด๋ฆ์ ๋ช ๋ช ๊ท์น๊ณผ ํ๋กํผํฐ ๊ฐ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ๊ฐ์ ์๋์ ๊ฐ๋ค.
* ํ๋กํผํฐ ์ด๋ฆ : ๋น ๋ฌธ์์ด์ ํฌํจํ๋ ๋ฌธ์์ด๊ณผ ์ซ์ * ํ๋กํผํฐ ๊ฐ : undefined์ ์ ์ธํ ๋ชจ๋ ๊ฐ
### ๋ฉ์๋(Method) ๋ฉ์๋๋ ๊ฐ์ฒด์ ์ ํ๋์ด ์๋ ํจ์๋ฅผ ์๋ฏธํ๋ค. ์ฆ ํ๋กํผํฐ ๊ฐ์ด ํจ์์ผ ๊ฒฝ์ฐ, ์ผ๋ฐ ํจ์์ ๊ตฌ๋ถํ๊ธฐ ์ํด ๋ฉ์๋๋ผ ์นญํ๋ค.
### ๊ฐ์ฒด ์์ฑ ๋ฐฉ๋ฒ์๋ฐ์์๋ ํด๋์ค๋ฅผ ์ฌ์ ์ ์ ์ํ๊ณ ํ์ํ ์์ ์ new ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ๋ฐฉ์์ผ๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค. ํ์ง๋ง ์๋ฐ์คํฌ๋ฆฝํธ๋ ํด๋์ค๋ผ๋ ๊ฐ๋ ์ด ์๊ณ ๋ณ๋์ ๊ฐ์ฒด ์์ฑ ๋ฐฉ๋ฒ์ด ์กด์ฌํ๋ค.
> ECMAScript 6์์ ์๋กญ๊ฒ ํด๋์ค๊ฐ ๋์ ๋์๋ค. ํ๋กํ ํ์ ๊ธฐ๋ฐ ํ๋ก๊ทธ๋๋ฐ์ ํด๋์ค๊ฐ ์กด์ฌํ์ง ์๋ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ์คํ์ผ๋ก ํ๋กํ ํ์ ์ฒด์ธ๊ณผ ํด๋ก์ ๋ฑ์ผ๋ก ๊ฐ์ฒด ์งํฅ ์ธ์ด์ ์์, ์บก์ํ(์ ๋ณด ์๋) ๋ฑ์ ๊ฐ๋ ์ ๊ตฌํํ ์ ์๋ค. ํ์ง๋ง class ๊ธฐ๋ฐ ์ธ์ด์ ์ต์ํ ํ๋ก๊ทธ๋๋จธ๋ค์ ํผ๋์ ์ผ์ผํฌ ์ ์์ผ๋ฉฐ JavaScript๋ฅผ ์ด๋ ต๊ฒ ๋๋ผ๊ฒํ๋ ํ๋์ ์ฅ๋ฒฝ์ฒ๋ผ ์ธ์๋์๋ค. ES6์ Class๋ ๊ธฐ์กด prototype ๊ธฐ๋ฐ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ๋ณด๋ค Class ๊ธฐ๋ฐ ์ธ์ด์ ์ต์ํ ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ณด๋ค ๋น ๋ฅด๊ฒ ํ์ตํ ์ ์๋ ๋จ์ํ๊ณ ๊นจ๋ํ ์๋ก์ด ๋ฌธ๋ฒ์ ์ ์ํ๊ณ ์๋ค. ES6์ Class๊ฐ ์๋ก์ด ๊ฐ์ฒด์งํฅ ๋ชจ๋ธ์ ์ ๊ณตํ๋ ๊ฒ์ด ์๋๋ฉฐ Class๋ ์ฌ์ค ํจ์์ด๊ณ ๊ธฐ์กด prototype ๊ธฐ๋ฐ ํจํด์ Syntactic sugar์ด๋ค.
### ๊ฐ์ฒด ๋ฆฌํฐ๋ด๊ฐ์ฅ ์ผ๋ฐ์ ์ด๊ณ ๊ฐํธํ ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฐ์ฒด ์์ฑ ๋ฐฉ์์ด๋ค.
์ค๊ดํธ({})๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋๋ฐ {} ๋ด์ ์๋ฌด๊ฒ๋ ๊ธฐ์ ํ์ง ์์ผ๋ฉด ๋น ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ค. {} ๋ด์ 1๊ฐ ์ด์์ ํ๋กํผํฐ ์ด๋ฆ(Property name): ํ๋กํผํฐ ๊ฐ(Property value)์ ๊ธฐ์ ํ๋ฉด ํด๋น ํ๋กํผํฐ๊ฐ ์ถ๊ฐ๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์๋ค.
var emptyObject = {}; console.log(typeof emptyObject); // object
var person = {
name: 'Lee', gender: 'male', sayHello: function () { console.log('Hi! My name is ' + this.name); }
};
console.log(typeof person); // object console.log(person); // { name: โLeeโ, gender: โmaleโ, sayHello: [Function: sayHello] }
person.sayHello(); // Hi! My name is Lee
๊ฐ์ฒด ๋ฆฌํฐ๋ด์ ์ํ ๊ฐ์ฒด ์์ฑ ๋ฐฉ์์ ํน์ง์ ์์ฑ์ ํจ์๋ฅผ ์ฌ์ฉํ ๊ฐ์ฒด ์์ฑ ๋ฐฉ์๊ณผ ๋ฌ๋ฆฌ new ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ํ์์์ด ์ ์ธ๊ณผ ๋์์ ์ธ์คํด์ค๊ฐ ์์ฑ๋๋ค.
new ์ฐ์ฐ์์ Object() ์์ฑ์ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋น ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์๋ค. ๋น ๊ฐ์ฒด ์์ฑ ์ดํ ํ๋กํผํฐ์ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ์ฌ ๊ฐน์ฒด๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ด๋ค.
๊ฐ์ฒด์ ํ๋กํผํฐ์ ์๋ก์ด ๊ฐ์ ํ ๋นํ๋ฉด ํ๋กํผํฐ ๊ฐ์ ๊ฐฑ์ ๋๋ค. ๊ฐ์ฒด๊ฐ ์์ ํ๊ณ ์์ง ์์ ํ๋กํผํฐ์ ๊ฐ์ ํ ๋นํ๋ฉด ํด๋น ๊ฐ์ฒด์ ํ๋กํผํฐ๋ฅผ ์ถ๊ฐํ๊ณ ๊ฐ์ ํ ๋นํ๋ค.
// ๋น ๊ฐ์ฒด์ ์์ฑvar person = new Object(); // ํ๋กํผํฐ ์ถ๊ฐperson.name = โLeeโ; person.gender = โmaleโ; person.sayHello = function () {
console.log('Hi! My name is ' + this.name);
};
console.log(typeof person); // object console.log(person); // { name: โLeeโ, gender: โmaleโ, sayHello: [Function] }
person.sayHello(); // Hi! My name is Lee
๋ฐ๋์ new ์ฐ์ฐ์์ Object() ์์ฑ์ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋น๊ฐ์ฒด๋ฅผ ์์ฑํด์ผ ํ๋ ๊ฒ์ ์๋๋ค. ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๊ฐ์ฒด ๋ฆฌํฐ๋ด์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ๊ฐํธํ๋ค.
var person = {}; person.name = โLeeโ; person.gender = โmaleโ; person.sayHello = function () {
console.log('Hi! My name is ' + this.name);
};
Object() ์์ฑ์ ํจ์ ๋ฐฉ์์ ํน๋ณํ ์ด์ ๊ฐ ์๋ค๋ฉด ๊ทธ๋ค์ง ์ ์ฉํด ๋ณด์ด์ง ์๋๋ค. ํ์ง๋ง ๊ฐ์ฒด ๋ฆฌํฐ๋ด ๋ฐฉ์์ผ๋ก ์์ฑ๋ ๊ฐ์ฒด๋ ๊ฒฐ๊ตญ ๋ด์ฅ(Built-in) ํจ์์ธ Object() ์์ฑ์ ํจ์๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ฒ์ ๋จ์ํ ์ํจ short-hand(์ถ์ฝ๋ฒ)์ด๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๊ฐ์ฒด ๋ฆฌํฐ๋ด๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ์ฝ๋๋ฅผ ๋ง๋๋ฉด ๋ด๋ถ์ ์ผ๋ก Object() ์์ฑ์ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
๊ฐ์ฒด ๋ฆฌํฐ๋ด ๋ฐฉ์๊ณผ Object() ์์ฑ์ ํจ์ ๋ฐฉ์์ผ๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ฒ์ ํ๋กํผํฐ ๊ฐ๋ง ๋ค๋ฅธ ์ฌ๋ฌ๊ฐ์ ๊ฐ์ฒด ์์ฑ์ ๋ถํธ์ด ์๋ค.๋์ผํ ํ๋กํผํฐ๋ฅผ ๊ฐ๋ ๊ฐ์ฒด์์๋ ๋ถ๊ตฌํ๊ณ ๋งค๋ฒ ๊ฐ์ ํ๋กํผํฐ๋ฅผ ๊ธฐ์ ํด์ผํ๋ค.
var person1 = {
name: 'Lee', gender: 'male', sayHello: function () { console.log('Hi! My name is ' + this.name); }
};
var person2 = {
name: 'Kim', gender: 'female', sayHello: function () { console.log('Hi! My name is ' + this.name); }
};
์์ฑ์ ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋ง์น ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ์ํ ํ ํ๋ฆฟ(ํด๋์ค)์ฒ๋ผ ์ฌ์ฉํ์ฌ ๊ตฌ์ฑ์ด ๋์ผํ ๊ฐ์ฒด ์ฌ๋ฌ๊ฐ๋ฅผ ๊ฐํธํ๊ฒ ์์ฑํ ์ ์๋ค.
// ์์ฑ์ ํจ์function Person(name, gender) {
this.name = name; this.gender = gender; this.sayHello = function(){ console.log('Hi! My name is ' + this.name); };
}
// ์ธ์คํด์ค์ ์์ฑvar person1 = new Person(โLeeโ, โmaleโ); var person2 = new Person(โKimโ, โfemaleโ);
console.log(โperson1: โ, typeof person1); console.log(โperson2: โ, typeof person2); console.log(โperson1: โ, person1); console.log(โperson2: โ, person2);
person1.sayHello(); person2.sayHello();
* ์์ฑ์ ํจ์ ์ด๋ฆ์ ์ผ๋ฐ์ ์ผ๋ก ๋๋ฌธ์๋ก ์์ํ๋ค.์ด๊ฒ์ ์์ฑ์ ํจ์์์ ์ธ์ํ๋๋ก ๋์์ ์ค๋ค. * ํ๋กํผํฐ ๋๋ ๋ฉ์๋๋ช ์์ ๊ธฐ์ ํ this๋ ์์ฑ์ ํจ์๋ก ์์ฑ๋ ์ธ์คํด์ค(instance)๋ฅผ ๊ฐ๋ฆฌํจ๋ค.๋ฐ๋ผ์ this์ ์ฐ๊ฒฐ๋์๋ ํ๋กํผํฐ์ ๋ฉ์๋๋ public์ด๋ค. * ์์ฑ์ ํจ์ ๋ด์์ ์ ์ธ๋ ์ผ๋ฐ ๋ณ์๋ private์ด๋ค. ์ฆ ์์ฑ์ ํจ์ ๋ด๋ถ์์๋ ์์ ๋กญ๊ฒ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ ์ธ๋ถ์์ ์ ๊ทผํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๋ค.
function Person(name, gender) {
var married = 'yes'; // private this.name = name; // public this.gender = gender; // public this.sayHello = function(){ // public console.log('Hi! My name is ' + this.name); };
}
var person = new Person(โLeeโ, โmaleโ);
console.log(typeof person); console.log(person);
console.log(person.gender); // โmaleโ console.log(person.married); // undefined
์๋ฐ์คํฌ๋ฆฝํธ์ ์์ฑ์ ํจ์๋ ๋ง ๊ทธ๋๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ์ญํ ์ ํ๋ค. ํ์ง๋ง ์๋ฐ์ ๊ฐ์ ๊ฐ์ฒด์งํฅ ์ธ์ด์ ์์ฑ์(Constructor)์๋ ๋ค๋ฅด๊ฒ ๊ทธ ํ์์ด ์ ํด์ ธ์๋ ๊ฒ์ด ์๋๋ผ ๊ธฐ์กด ํจ์์ new ์ฐ์ฐ์๋ฅผ ๋ถ์ฌ์ ํธ์ถํ๋ฉด ํด๋น ํจ์๋ ์์ฑ์ ํจ์๋ก ๋์ํ๋ค.
์ด๋ ์์ฑ์ ํจ์๊ฐ ์๋ ์ผ๋ฐ ํจ์์ new ์ฐ์ฐ์๋ฅผ ๋ถ์ฌ ํธ์ถํ๋ฉด ์์ฑ์ ํจ์์ฒ๋ผ ๋์ํ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. ๋ฐ๋ผ์ ์ผ๋ฐ์ ์ผ๋ก ์์ฑ์ ํจ์๋ช ์ ์ฒซ๋ฌธ์๋ฅผ ๋๋ฌธ์๋ก ๊ธฐ์ ํ์ฌ ํผ๋์ ๋ฐฉ์งํ๋ ค๋ ๋ ธ๋ ฅ์ ํ๋ค.
new ์ฐ์ฐ์์ ํจ๊ป ํจ์๋ฅผ ํธ์ถํ๋ฉด this ๋ฐ์ธ๋ฉ์ด ๋ค๋ฅด๊ฒ ๋์ํ๋ค. ์์ธํ ๋ด์ฉ์ ์์ฑ์ ํธ์ถ ํจํด์ ์ฐธ์กฐํ๊ธฐ ๋ฐ๋๋ค.
ํ๋กํผํฐ ์ด๋ฆ์๋ ๋ฌธ์์ด(๋น ๋ฌธ์์ด ํฌํจ)๊ณผ ์ซ์๊ฐ ์ฌ ์ ์๋ค.๊ทธ๋ฆฌ๊ณ ํ๋กํผํฐ ๊ฐ์ undefined์ ์ ์ธํ ๋ชจ๋ ๊ฐ๊ณผ ํํ์์ด ์ฌ ์ ์์ผ๋ฉฐ ํ๋กํผํฐ ๊ฐ์ด ํจ์์ธ ๊ฒฝ์ฐ ์ด๋ฅผ ๋ฉ์๋๋ผ ํ๋ค.
ํ๋กํผํฐ ์ด๋ฆ์ ๋ฐ์ดํโ โโ๋ ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ฌ์ฉํ ์ ์๋ ์ ํจํ ์ด๋ฆ์ด๊ณ ์์ฝ์ด๊ฐ ์๋ ๊ฒฝ์ฐ ์๋ตํ ์ ์๋ค. ๋ฐ๋๋ก ๋งํ๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ฌ์ฉํ ์ ์๋ ์ ํจํ ์ด๋ฆ์ด ์๋ ๊ฒฝ์ฐ ๋ฐ๋์ ๋ฐ์ดํ๋ฅผ ์ฌ์ฉํ์ฌ์ผ ํ๋ค.
var person = {
'first-name': 'Ung-mo', 'last-name': 'Lee', gender: 'male', function: 1 // OK. ํ์ง๋ง ์์ฝ์ด๋ ์ฌ์ฉํ์ง ๋ง์์ผ ํ๋ค.
};
console.log(person.function);
ํ๋กํผํฐ ์ด๋ฆ first-name์๋ ๋ฐ๋์ ๋ฐ์ดํ๋ฅผ ์ฌ์ฉํด์ผ ํ์ง๋ง first_name์๋ ์๋ต ๊ฐ๋ฅํ๋ค. ์ด๋ first-name์ ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ ํจํ ์ด๋ฆ์ด ์๋๋ผ โ-โ์ฐ์ฐ์๊ฐ ์๋ ํํ์์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์์ฝ์ด๋ฅผ ํ๋กํผํฐ ์ด๋ฆ์ผ๋ก ์ฌ์ฉํ์ฌ๋ ์๋ฌ๊ฐ ๋ฐ์ํ์ง๋ ์๋๋ค. ํ์ง๋ง ์์์น ๋ชปํ ์๋ฌ๊ฐ ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก ์์ฝ์ด๋ฅผ ํ๋กํผํฐ ์ด๋ฆ์ผ๋ก ์ฌ์ฉํ์ฌ์๋ ์๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์์ฝ์ด๋ ์๋์ ๊ฐ๋ค.
abstract arguments boolean break byte case catch char class* const continue debugger default delete do double else enum* eval export* extends* false final finally float for function goto if implements import* in instanceof int interface let long native new null package private protected public return short static super* switch synchronized this throw throws transient true try typeof var void volatile while with yield // *๋ ES6์์ ์ถ๊ฐ๋ ์์ฝ์ด
๊ฐ์ฒด์ ํ๋กํผํฐ์ ์ ๊ทผํ์ฌ๋ฉด ์๋์ ๊ฐ์ด ๋๊ฐ์ง ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค.
* ๋ง์นจํ(.)ํ๊ธฐ๋ฒ * ๋๊ดํธ([]) ํ๊ธฐ๋ฒ
var person = {
'first-name': 'Ung-mo', 'last-name': 'Lee', gender: 'male',
};
console.log(person);
console.log(person.first-name); // NaN: undefined-name console.log(person); // ReferenceError: first is not defined console.log(person); // โUng-moโ
console.log(person.gender); // โmaleโ console.log(person); // ReferenceError: gender is not defined console.log(person); // โmaleโ
ํ๋กํผํฐ ์ด๋ฆ์ด ์ ํจํ ์๋ฐ์คํฌ๋ฆฝํธ ์ด๋ฆ์ด๊ณ ์์ฝ์ด๊ฐ ์๋ ๊ฒฝ์ฐ ํ๋กํผํฐ ๊ฐ์ ๋ง์นจํ ํ๊ธฐ๋ฒ, ๋๊ดํธ ํ๊ธฐ๋ฒ ๋ชจ๋ ์ฌ์ฉํ ์ ์๋ค.
ํ๋กํผํฐ ์ด๋ฆ์ด ์ ํจํ ์๋ฐ์คํฌ๋ฆฝํธ ์ด๋ฆ์ด ์๋๊ฑฐ๋ ์์ฝ์ด์ธ ๊ฒฝ์ฐ ํ๋กํผํฐ ๊ฐ์ ๋๊ดํธ ํ๊ธฐ๋ฒ์ผ๋ก ์ฝ์ด์ผ ํ๋ค. ๋๊ดํธ([]) ํ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ๋๊ดํธ ๋ด์ ๋ค์ด๊ฐ๋ ํ๋กํผํฐ ์ด๋ฆ์ ๋ฐ๋์ ๋ฌธ์์ด์ด์ด์ผ ํ๋ค.
๊ฐ์ฒด์ ์กด์ฌํ์ง ์๋ ํ๋กํผํฐ๋ฅผ ์ฐน์กฐํ๋ฉด undefined๋ฅผ ๋ฐํํ๋ค.
var person = {
'first-name': 'Ung-mo', 'last-name': 'Lee', gender: 'male',
};
console.log(person.age); // undefined
๊ฐ์ฒด๊ฐ ์์ ํ๊ณ ์๋ ํ๋กํผํฐ์ ์๋ก์ด ๊ฐ์ ํ ๋นํ๋ฉด ํ๋กํผํฐ ๊ฐ์ ๊ฐฑ์ ๋๋ค.
var person = {
'first-name': 'Ung-mo', 'last-name': 'Lee', gender: 'male',
};
person = โKimโ; console.log(person ); // โKimโ
๊ฐ์ฒด๊ฐ ์์ ํ๊ณ ์์ง ์์ ํ๋กํผํฐ์ ๊ฐ์ ํ ๋นํ๋ฉด ํด๋น ํ๋กํผํฐ๋ฅผ ๊ฐ์ฒด์ ์ถ๊ฐํ๊ณ ๊ฐ์ ํ ๋นํ๋ค.
var person = {
'first-name': 'Ung-mo', 'last-name': 'Lee', gender: 'male',
};
person.age = 20; console.log(person.age); // 20
delete ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ์ฒด์ ํ๋กํผํฐ๋ฅผ ์ญ์ ํ ์ ์๋ค.
var person = {
'first-name': 'Ung-mo', 'last-name': 'Lee', gender: 'male',
};
delete person.gender; console.log(person.gender); // undefined
delete person; console.log(person); // Object {first-name: โUng-moโ, last-name: โLeeโ}
for-in ๋ฌธ์ ์ฌ์ฉํ๋ฉด ๊ฐ์ฒด์ ํฌํจ๋ ๋ชจ๋ ํ๋กํผํฐ์ ๋ํด ๋ฃจํ๋ฅผ ์ํํ ์ ์๋ค.
var person = {
'first-name': 'Ung-mo', 'last-name': 'Lee', gender: 'male'
};
for(var prop in person) {
console.log(prop + ': ' + person[prop]);
}
/* first-name: Ung-mo last-name: Lee gender: male */
๊ธฐ๋ณธ์๋ฃํ object๋ฅผ ๊ฐ์ฒดํ ๋๋ ์ฐธ์กฐํ์ด๋ผ ํ๋ค. ์ฐธ์กฐํ์ด๋ ๊ฐ์ฒด์ ๋ชจ๋ ์ฐ์ฐ์ด ์ค์ ๊ฐ์ด ์๋ ์ฐธ์กฐ๊ฐ์ผ๋ก ์ฒ๋ฆฌ๋จ์ ์๋ฏธํ๋ค. ์ด์ ๋ฐํด ๊ธฐ๋ณธ์๋ฃํ์ ๊ฐ์ ๊ฐ(value)์ผ๋ก ์ ๋ฌ๋๋ค. ์ฆ,๋ณต์ฌ๋์ด ์ ๋ฌ๋๋ค.์ด๋ฅผ pass-by-value๋ผ ํ๋ค. ๊ธฐ๋ณธ์๋ฃํ์ ๊ฐ์ด ํ๋ฒ ์ ํด์ง๋ฉด ๋ณ๊ฒฝํ ์ ์์ง๋ง(immutable), ๊ฐ์ฒด๋ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ํ๋กํผํฐ๋ค์ ์งํฉ์ด๋ผ ํ ์ ์๋ค. immutable์ ๋ํ ์์ธํ ๋ด์ฉ์ ๊ฐ์ฒด์ ๋ณ๊ฒฝ๋ถ๊ฐ์ฑ(Immutability)์ ์ฐธ์กฐํ๊ธฐ ๋ฐ๋๋ค.
// Pass-by-reference var foo = {
val: 10
}
var bar = foo; console.log(foo.val, bar.val); // 10 10 console.log(foo === bar); // true
bar.val = 20; console.log(foo.val, bar.val); // 20 20 console.log(foo === bar); // true
foo ๊ฐ์ฒด๋ฅผ ๊ฐ์ฒด ๋ฆฌํฐ๋ด ๋ฐฉ์์ผ๋ก ์์ฑํ์๋ค.์ด๋ ๋ณ์ foo๋ ๊ฐ์ฒด ์์ฒด๋ฅผ ์ ์ฅํ๊ณ ์๋ ๊ฒ์ด ์๋๋ผ ์์ฑ๋ ๊ฐ์ฒด์ ์ฐธ์กฐ๊ฐ(address)๋ฅผ ์ ์ฅํ๊ณ ์๋ค.
๋ณ์ bar์ ๋ณ์ foo์ ๊ฐ์ ํ ๋นํ์๋ค. ๋ณ์ foo์ ๊ฐ์ ์์ฑ๋ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ์ฐธ์กฐ๊ฐ์ด๋ฏ๋ก ๋ณ์ bar์๋ ๊ฐ์ ์ฐธ์กฐ๊ฐ์ด ์ ์ฅ๋๋ค. ์ฆ ๋ณ์ foo, bar ๋ชจ๋ ๋์ผํ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๊ณ ์๋ค. ๋ฐ๋ผ์ ์ฐธ์กฐํ๊ณ ์๋ ๊ฐ์ฒด์ val ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ๋ณ์ foo, bar ๋ชจ๋ ๋์ผํ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๊ณ ์์ผ๋ฏ๋ก ๋ ๋ณ์ ๋ชจ๋ ๋ณ๊ฒฝ๋ ๊ฐ์ฒด์ ํ๋กํผํฐ ๊ฐ์ ์ฐธ์กฐํ๊ฒ ๋๋ค. ๊ฐ์ฒด๋ ์ฐธ์กฐ(Reference) ๋ฐฉ์์ผ๋ก ์ ๋ฌ๋๋ค. ๊ฒฐ์ฝ ๋ณต์ฌ๋์ง ์๋๋ค.
>์๋์ ๊ฒฝ์ฐ๋ ์์ ๊ฒฝ์ฐ์ ์ฝ๊ฐ ์ฐจ์ด๊ฐ ์๋ค.
var foo = { val: 10 }; var bar = { val: 10 };
console.log(foo.val, bar.val); // 10 10 console.log(foo === bar); // false
var baz = bar;
console.log(baz.val, bar.val); // 10 10 console.log(baz === bar); // true
๋ณ์ foo์ ๋ณ์ bar๋ ๋น๋ก ๋ด์ฉ์ ๊ฐ์ง๋ง ๋ณ๊ฐ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ์ฐธ์กฐ๊ฐ์ ํ ๋นํ์๋ค. ๋ฐ๋ผ์ ๋ณ์ bar์ ์ฐธ์กฐ๊ฐ์ ๋์ผํ์ง ์๋ค.
๋ณ์ baz์๋ ๋ณ์ bar์ ๊ฐ์ ํ ๋นํ์๋ค. ๊ฒฐ๊ตญ ๋ณ์ baz์ ๋ณ์ bar๋ ๋์ผํ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ์ฐธ์กฐ๊ฐ์ ์ ์ฅํ๊ณ ์๋ค.๋ฐ๋ผ์ ๋ณ์baz์ ๋ณ์ bar์ ์ฐธ์กฐ๊ฐ์ ๋์ผํ๋ค.
var a = {}, b = {}, c = {}; // a, b, c๋ ๊ฐ๊ฐ ๋ค๋ฅธ ๋น ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐconsole.log(a === b, a === c, b === c); // false false false
a = b = c = {}; // a, b, c๋ ๋ชจ๋ ๊ฐ์ ๋น ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐconsole.log(a === b, a === c, b === c); // true true true
๊ธฐ๋ณธ์๋ฃํ์ ๊ฐ์ ๊ฐ(value)์ผ๋ก ์ ๋ฌ๋๋ค. ์ฆ, ๋ณต์ฌ๋์ด ์ ๋ฌ๋๋ค. ์ด๋ฅผ pass-by-value๋ผ ํ๋ค. ๊ธฐ๋ณธ์๋ฃํ์ ๊ฐ์ด ํ๋ฒ ์ ํด์ง๋ฉด ๋ณ๊ฒฝํ ์ ์๋ค.(immutable)
immutable์ ๋ํ ์์ธํ ๋ด์ฉ์ ๊ฐ์ฒด์ ๋ณ๊ฒฝ๋ถ๊ฐ์ฑ(Immutability)์ ์ฐธ์กฐํ๊ธฐ ๋ฐ๋๋ค.
// Pass-by-value var a = 1; var b = a;
console.log(a, b); // 1 1 console.log(a === b); // true
a = 10; console.log(a, b); // 10 1 console.log(a === b); // false
๋ณ์ a๋ ๊ธฐ๋ณธ์๋ฃํ์ธ number type์ 1์ ์ ์ฅํ๊ณ ์๋ค. ๊ธฐ๋ณธ์๋ฃํ์ ๊ฒฝ์ฐ ๊ฐ์ด ๋ณต์ฌ๋์ด ๋ณ์์ ์ ์ฅ๋๋ค. ์ฆ ์ฐธ์กฐํ์ผ๋ก ์ ์ฅ๋๋ ๊ฒ์ด ์๋๋ผ ๊ฐ ์์ฒด๊ฐ ์ ์ฅ๋๊ฒ ๋๋ค. ๋ณ์ b์ ๋ณ์ a๋ฅผ ๋์ ํ ๊ฒฝ์ฐ,๋ณ์ a์ ๊ฐ1์ ๋ณต์ฌ๋์ด ๋ณ์ b์ ์ ์ฅ๋๋ค.
๊ฐ์ฒด๋ ์๋์ ๊ฐ์ด ๋ถ๋ฅํ ์ ์๋ค.
-
Built-in Object(๋ด์ฅ ๊ฐ์ฒด)๋ ์นํ์ด์ง ๋ฑ์ ํํํ๊ธฐ ์ํ ๊ณตํต์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ์นํ์ด์ง๊ฐ ๋ธ๋ผ์ฐ์ ์ ์ํด ๋ก๋๋์๋ง์ ๋ณ๋ค๋ฅธ ํ์์์ด ๋ฐ๋ก ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.Built-in Object๋ ์๋์ ๊ฐ์ด ๊ตฌ๋ถํ ์ ์๋ค.
-
-
Standard Built-in Objects(or Global Objects)
-
-
-
BOM(Browser Object Model)
-
-
-
DOM(Document Object Model)
-
Standard Built-in Objects(ํ์ค ๋นํธ์ธ ๊ฐ์ฒด)๋ฅผ ์ ์ธํ BOM๊ณผ DOM์ Native Object๋ผ๊ณ ๋ถ๋ฅํ๊ธฐ๋ ํ๋ค. ๋ํ ์ฌ์ฉ์๊ฐ ์์ฑํ ๊ฐ์ฒด๋ฅผ Host Object(์ฌ์ฉ์ ์ ์ ๊ฐ์ฒด)๋ผ ํ๋ค.
* Host Object(์ฌ์ฉ์ ์ ์ ๊ฐ์ฒด)
์ฌ์ฉ์๊ฐ ์์ฑํ ๊ฐ์ฒด๋ค์ด๋ค. constructor ํน์ ๊ฐ์ฒด๋ฆฌํฐ๋ด์ ํตํด ์ฌ์ฉ์๊ฐ ๊ฐ์ฒด๋ฅผ ์ ์ํ๊ณ ํ์ฅ์ํจ ๊ฒ๋ค์ด๊ธฐ ๋๋ฌธ์ Built-in Object์ Native Object๊ฐ ๊ตฌ์ฑ๋ ์ดํ์ ๊ตฌ์ฑ๋๋ค.