Baseline Widely available
Object.assign()
ë©ìëë ì¶ì² ê°ì²´ë¤ì 모ë ì´ê±° ê°ë¥í ìì²´ ìì±ì ë³µì¬í´ ëì ê°ì²´ì ë¶ì¬ë£ìµëë¤. ê·¸ í ëì ê°ì²´ë¥¼ ë°íí©ëë¤.
const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };
const returnedTarget = Object.assign(target, source);
console.log(target);
// Expected output: Object { a: 1, b: 4, c: 5 }
console.log(returnedTarget === target);
// Expected output: true
구문
Object.assign(target, ...sources);
매ê°ë³ì
target
목í ê°ì²´. ì¶ì² ê°ì²´ì ìì±ì ë³µì¬í´ ë°ìí í ë°íí ê°ì²´ì ëë¤.
sources
ì¶ì² ê°ì²´. 목í ê°ì²´ì ë°ìíê³ ì íë ìì±ë¤ì ê°ê³ ìë ê°ì²´ë¤ì ëë¤.
목í ê°ì²´.
ì¤ëªëª©í ê°ì²´ì ìì± ì¤ ì¶ì² ê°ì²´ì ëì¼í í¤ë¥¼ ê°ë ìì±ì ê²½ì°, ê·¸ ìì± ê°ì ì¶ì² ê°ì²´ì ìì± ê°ì¼ë¡ ë®ì´ìëë¤. ì¶ì² ê°ì²´ë¤ì ìì± ì¤ììë í¤ê° ê²¹ì¹ ê²½ì° ë¤ìª½ ê°ì²´ì ìì± ê°ì´ ì쪽 ê°ì²´ì ìì± ê°ë³´ë¤ ì°ì í©ëë¤.
Object.assign()
ë©ìëë ì¶ì² ê°ì²´ì 'ì´ê±° ê°ë¥í ìì²´ ìì±'ë§ ëª©í ê°ì²´ë¡ ë³µì¬í©ëë¤. ì¶ì² ê°ì²´ìì ìì± ê°ì ê°ì ¸ì¬ ë [[Get]]
, 목í ê°ì²´ì ìì± ê°ì ì§ì í ë [[Set]]
ì ì¬ì©íë¯ë¡ ê°ê° ì ê·¼ìì ì¤ì ì를 í¸ì¶í©ëë¤. ê·¸ë¬ë¯ë¡ Object.assign()
ì ìì±ì ë¨ìí ë³µì¬íê±°ë ìë¡ ì ìíë ê²ì´ ìëë¼, í ë¹(assign)íë ê²ì
ëë¤. ë°ë¼ì ì¶ì² ê°ì²´ê° ì ê·¼ì를 í¬í¨íë ê²½ì°, íë¡í íì
ì ìë¡ì´ ìì±ì ì¶ê°íë ì©ëë¡ë ì í©íì§ ìì ìë ììµëë¤.
ì´ê±°ì±ì í¬í¨í ìì± ì ì를 íë¡í íì
ì¼ë¡ ë³µì¬íë ¤ë©´ Object.getOwnPropertyDescriptor()
ì Object.defineProperty()
를 ì¬ì©íì¸ì.
Object.assign()
ì String
í¤ì Symbol
í¤ ìì± ëª¨ë ë³µì¬í©ëë¤.
ì¤ë¥(ëì ê°ì²´ì ìì±ì´ ì°ê¸° ë¶ê°í ìí ë±)를 ë§ì£¼ì¹ë©´ TypeError
ê° ë°ìí©ëë¤. ê·¸ë¬ë ì¤ë¥ê° ë°ìí기 ì ì ì´ë¯¸ ì¶ê°/ë³ê²½í ë¤ë¥¸ ìì±ì ê°ì ëì ê°ì²´ì ì ì§ë©ëë¤.
ìì ê°ì²´ ë³µì ì°¸ê³ :
Object.assign()
ì ì¶ì²ìnull
ëëundefined
를 ì ê³µí´ë ìì¸ë ë°ìíì§ ììµëë¤.
const obj = { a: 1 };
const copy = Object.assign({}, obj);
console.log(copy); // { a: 1 }
ê¹ì ë³µì¬ ì£¼ìì
Object.assign()
ì ìì±ì ê°ì ë³µì¬í기 ë문ì, ê¹ì ë³µì¬ë¥¼ ìííë ¤ë©´ ë¤ë¥¸ ë°©ë²ì ì¬ì©í´ì¼ í©ëë¤.
ë§ì½ ì¶ì² ê°ì´ ê°ì²´ì ëí 참조ë¼ë©´ 참조 ê°ë§ ë³µì¬í©ëë¤.
function test() {
"use strict";
let obj1 = { a: 0, b: { c: 0 } };
let obj2 = Object.assign({}, obj1);
console.log(JSON.stringify(obj2)); // { a: 0, b: { c: 0}}
obj1.a = 1;
console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 0}}
console.log(JSON.stringify(obj2)); // { a: 0, b: { c: 0}}
obj2.a = 2;
console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 0}}
console.log(JSON.stringify(obj2)); // { a: 2, b: { c: 0}}
obj2.b.c = 3;
console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 3}}
console.log(JSON.stringify(obj2)); // { a: 2, b: { c: 3}}
// ê¹ì ë³µì¬
obj1 = { a: 0, b: { c: 0 } };
let obj3 = JSON.parse(JSON.stringify(obj1));
obj1.a = 4;
obj1.b.c = 4;
console.log(JSON.stringify(obj3)); // { a: 0, b: { c: 0}}
}
test();
ê°ì²´ ë³í©
const o1 = { a: 1 };
const o2 = { b: 2 };
const o3 = { c: 3 };
const obj = Object.assign(o1, o2, o3);
console.log(obj); // { a: 1, b: 2, c: 3 }
console.log(o1); // { a: 1, b: 2, c: 3 }, 목í ê°ì²´ ìì²´ê° ë³ê²½ë¨.
ê°ì ìì±ì ê°ì§ ê°ì²´ ë³í©
const o1 = { a: 1, b: 1, c: 1 };
const o2 = { b: 2, c: 2 };
const o3 = { c: 3 };
const obj = Object.assign({}, o1, o2, o3);
console.log(obj); // { a: 1, b: 2, c: 3 }
ê°ì í¤ë¥¼ ê°ì§ ìì±ì ê²½ì° ë§¤ê°ë³ì ìììì ë ë¤ì ìì¹í ê°ì²´ì ê°ì¼ë¡ ë®ì´ìëë¤.
ì¬ë³¼ ìì± ë³µì¬const o1 = { a: 1 };
const o2 = { [Symbol("foo")]: 2 };
const obj = Object.assign({}, o1, o2);
console.log(obj); // { a : 1, [Symbol("foo")]: 2 } (cf. bug 1207182 on Firefox)
Object.getOwnPropertySymbols(obj); // [Symbol(foo)]
íë¡í íì
ì²´ì¸ì ìì±ê³¼ ì´ê±° ë¶ê°ë¥í ìì±ì ë³µì¬ ë¶ê°
const obj = Object.create(
{ foo: 1 },
{
// fooë objì íë¡í íì
ì²´ì¸ì ìì
bar: {
value: 2, // barë ì´ê±° ë¶ê°ë¥
},
baz: {
value: 3,
enumerable: true, // bazë ì´ê±° ê°ë¥í ìì²´ ìì±
},
},
);
const copy = Object.assign({}, obj);
console.log(copy); // { baz: 3 }
ìì ê°ì ê°ì²´ë¡ ëí
const v1 = "abc";
const v2 = true;
const v3 = 10;
const v4 = Symbol("foo");
const obj = Object.assign({}, v1, null, v2, undefined, v3, v4);
// ìì ê°ì ëííê³ , nullê³¼ undefinedë 무ì
// ì°¸ê³ : 문ìì´ ëí¼ë§ ìì²´ ì´ê±°í ìì±ì ê°ì§ ì ìì
console.log(obj); // { "0": "a", "1": "b", "2": "c" }
ìì¸ë¡ ì¸í ë³µì¬ ìì
ì¤ë¨
const target = Object.defineProperty({}, "foo", {
value: 1,
writable: false,
}); // target.fooë ì½ê¸° ì ì© ìì±
Object.assign(target, { bar: 2 }, { foo2: 3, foo: 3, foo3: 3 }, { baz: 4 });
// TypeError: "foo" is read-only
// target.fooì í ë¹í ë ìì¸ ë°ì
console.log(target.bar); // 2, 첫 ë²ì§¸ ì¶ì² ê°ì²´ë ì±ê³µì ì¼ë¡ ë³µì¬í¨
console.log(target.foo2); // 3, ë ë²ì§¸ ì¶ì² ê°ì²´ ì¤ ì²« ë²ì§¸ ìì±ë ì±ê³µì ì¼ë¡ ë³µì¬í¨
console.log(target.foo); // 1, ì¬ê¸°ìì ìì¸ê° ë°ìíì
console.log(target.foo3); // undefined, assign ë©ìëê° ì¢
ë£ë¨, foo3ì ë³µì¬ëì§ ìì
console.log(target.baz); // undefined, ì¸ ë²ì§¸ ì¶ì² ê°ì²´ë ë³µì¬ëì§ ìì
ì ê·¼ì ë³µì¬
const obj = {
foo: 1,
get bar() {
return 2;
},
};
let copy = Object.assign({}, obj);
console.log(copy);
// { foo: 1, bar: 2 }, copy.barì ê°ì obj.barì ì ê·¼ìê° ë°íí ê°
// ìì±ì ì¨ì í 기ì ì를 ë³µì¬í´ í ë¹íë í¨ì
function completeAssign(target, ...sources) {
sources.forEach((source) => {
let descriptors = Object.keys(source).reduce((descriptors, key) => {
descriptors[key] = Object.getOwnPropertyDescriptor(source, key);
return descriptors;
}, {});
// 기본ì ì¼ë¡ Object.assignì ì´ê±° ê°ë¥í ì¬ë³¼ë ë³µì¬í¨
Object.getOwnPropertySymbols(source).forEach((sym) => {
let descriptor = Object.getOwnPropertyDescriptor(source, sym);
if (descriptor.enumerable) {
descriptors[sym] = descriptor;
}
});
Object.defineProperties(target, descriptors);
});
return target;
}
copy = completeAssign({}, obj);
console.log(copy);
// { foo:1, get bar() { return 2 } }
ëª
ì¸ ë¸ë¼ì°ì í¸íì± ê°ì´ 보기
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4