I. Object ํด๋์ค
๐ MDN ๋ฌธ์ ๋ณด๊ธฐ
์ด์ ๊น์ง ๋ฐฐ์ด ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด๋ค์ ์ํ
console.log(
new String('ABC') instanceof Object,
new Number(123) instanceof Object,
[] instanceof Object,
(function () {}) instanceof Object,
globalThis instanceof Object
);
- ๊ฐ๊ฐ ๋ฐ๋ก ์ถ๋ ฅํด์ [[Prototype]]์ ํผ์ณ ๋ณผ ๊ฒ
์์ฑ์ ํจ์
// ๋น ๊ฐ์ฒด ์์ฑ
console.log(
new Object(),
new Object(null),
new Object(undefined),
);
// ๊ฐ ๊ฐ์ ์ ํฉํ ๋ํํจ์๋ก ์์ฉ
console.log(
new Object(1),
new Object('ABC'),
new Object(true),
new Object([1, 2, 3])
);
II. ์ฃผ์ ์ ์ ๋ฉ์๋
1. assign - ์ธ์๋ก ์ฃผ์ด์ง ๊ฐ์ฒด(๋ค)์ ํ๋กํผํฐ๋ค์ ๋์ ๊ฐ์ฒด์ ๋ถ์ฌ๋ฃ์
- โญ๏ธ ๋์ ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝ
- ๊ฒฐ๊ณผ ๊ฐ์ฒด๋ฅผ ๋ฐํ
- โ ๏ธ ์์ ๋ณต์ฌ
์ธ์๋ค:
- ๋์ ๊ฐ์ฒด
- ์๋ณธ ๊ฐ์ฒด(๋ค)
const intro1 = {
name: 'ํ๊ธธ๋'
};
const intro2 = { ...intro1 };
โ
console.log(intro1, intro2);
const personal = {
age: 25,
married: false
};
const career = {
job: '๊ฐ๋ฐ์',
position: 'ํ์ฅ'
}
Object.assign(intro1, personal);
console.log(intro1);
// ๋ ์ด์์ ์๋ณธ์์ ๊ฐ์ ธ์ฌ ์๋ ์์
Object.assign(intro2, personal, career);
console.log(intro2);
const obj1 = new Object();
const obj2 = { x: 1, y: 2 };
const obj3 = { y: 3 };
const obj4 = { z: { a: 1 }}
โ
Object.assign(obj1, obj2, obj3, obj4);
โ
console.log(obj1);
- ํ๋กํผํฐ์ ํค๊ฐ ๊ฐ์ ๊ฒฝ์ฐ ๋ค์ ์ค๋ ์ธ์์ ๊ฒ์ด ๋ฎ์ด์
obj2.x = 0;
obj4.z.a = 2;
โ
console.log(obj1);
2. keys, values, entries - ๊ฐ์ฒด์ ํค / ๊ฐ / [ํค, ๊ฐ]์ ๋ฐฐ์ด๋ก ๋ฐํ
const obj = {
x: 1,
y: 2,
z: 3
};
โ
console.log(
Object.keys(obj),
);
console.log(
Object.values(obj),
);
console.log(
Object.entries(obj),
);
console.log(
Object
.keys(globalThis)
.sort()
);
// ๋ฐฐ์ด์ ์ฌ์ฉํ ๊ฒฝ์ฐ
const arr = [1, 2, 3, 4, 5];
โ
console.log(
Object.keys(arr),
Object.values(arr),
Object.entries(arr)
);
// ๊ฐ์ฒด๊ฐ ์๋ ๊ฒฝ์ฐ ๊ฐ์ฒด๋ก ๋ณํ
const str = 'ABCDEFG';
โ
console.log(
Object.keys(str),
Object.values(str),
Object.entries(str)
);
3. preventExtensions - ํ๋กํผํฐ ์ถ๊ฐ ๊ธ์ง
- isExtensible - ํด๋น ์ฌ๋ถ ํ์ธ
const obj = { x: 1, y: 2 };
โ
console.log(Object.isExtensible(obj));
Object.preventExtensions(obj);
โ
console.log(Object.isExtensible(obj));
obj.x++; // ํ๋กํผํฐ ์์ ๊ฐ๋ฅ
delete obj.y // ํ๋กํผํฐ ์ญ์ ๊ฐ๋ฅ
obj.z = 3; // ๐ก ํ๋กํผํฐ ์ถ๊ฐ ๊ธ์ง
โ
console.log(obj);
// ๋ฐฐ์ด์ ์ ์ฉ์
const arr = [1, 2];
Object.preventExtensions(arr);
โ
arr[2] = 3; // ๋์ํ์ง ์์
โ
console.log(arr);
arr.push(3); // โ ๏ธ ์ค๋ฅ ๋ฐ์
โ
console.log(arr);
4. seal - ํ๋กํผํฐ ์ถ๊ฐ์ ์ญ์ ๊ธ์ง
- isSealed - ํด๋น ์ฌ๋ถ ํ์ธ
const obj = { x: 1, y: 2 };
โ
console.log(Object.isSealed(obj));
Object.seal(obj);
โ
console.log(Object.isSealed(obj));
obj.x++; // ํ๋กํผํฐ ์์ ๊ฐ๋ฅ
delete obj.y // ๐ก ํ๋กํผํฐ ์ญ์ ๊ธ์ง
obj.z = 3; // ๐ก ํ๋กํผํฐ ์ถ๊ฐ ๊ธ์ง
โ
console.log(obj);
5. freeze - ๊ฐ์ฒด ๋๊ฒฐ - ์ฝ๊ธฐ๋ง ๊ฐ๋ฅ
- isFrozen - ํด๋น ์ฌ๋ถ ํ์ธ
// ๊ฐ์ฒด์ ์ฌ์ฉ
const obj = { x: 1, y: 2 };
โ
console.log(Object.isFrozen(obj));
Object.freeze(obj);
โ
console.log(Object.isFrozen(obj));
obj.x++; // ๐ก ํ๋กํผํฐ ์์ ๋ถ๊ฐ
delete obj.y // ๐ก ํ๋กํผํฐ ์ญ์ ๊ธ์ง
obj.z = 3; // ๐ก ํ๋กํผํฐ ์ถ๊ฐ ๊ธ์ง
โ
console.log(obj);
// ๋ฐฐ์ด์ ์ฌ์ฉ
const arr = [1];
โ
Object.freeze(arr);
โ
arr[0]++; // ๐ก ์์ ์์ , ์ถ๊ฐ, ์ญ์ ๋ถ๊ฐ
โ
console.log(arr);
โ ๏ธ ์๊ฒ๋ง ์ ์ฉ
const obj = {
x: 1,
y: { a: 1 }
};
โ
Object.freeze(obj);
โ
obj.x++;
obj.y.a++;
โ
console.log(obj);