Baseline Widely available
Object.assign()
éçã¡ã½ããã¯ããã¹ã¦ã®åæå¯è½ãªèªèº«ã®ããããã£ã®å¤ãã 1 ã¤ä»¥ä¸ã®ã³ãã¼å
ãªãã¸ã§ã¯ãããã³ãã¼å
ãªãã¸ã§ã¯ãã«ã³ãã¼ããããã«ä½¿ç¨ããã¾ãã夿´ãããã³ãã¼å
ãªãã¸ã§ã¯ããè¿ãã¾ãã
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)
Object.assign(target, source1)
Object.assign(target, source1, source2)
Object.assign(target, source1, source2, /* â¦, */ sourceN)
弿°
target
ã³ãã¼å ãªãã¸ã§ã¯ã â ã³ãã¼å ã®ããããã£ãé©ç¨ãããã®ã§ã夿´å¾ã«è¿ããã¾ãã
source1
, â¦, sourceN
ã³ãã¼å ãªãã¸ã§ã¯ã (åæ°ã¾ãã¯è¤æ°) â é©ç¨ãããããããã£ãå«ããªãã¸ã§ã¯ãã§ãã
ã³ãã¼å ãªãã¸ã§ã¯ãã§ãã
解説ã³ãã¼å ãªãã¸ã§ã¯ãã®ããããã£ã¯ãã³ãã¼å ã«åããã¼ã®ããããã£ãããã¨ä¸æ¸ãããã¾ããããå¾ã®ã³ãã¼å ã®ããããã£ããããåã®ãã®ãåæ§ã«ä¸æ¸ããã¾ãã
Object.assign()
ã¡ã½ããã¯ãã³ãã¼å
ãªãã¸ã§ã¯ãããåæå¯è½ (enumerable) ãã¤ç´æ¥ææ (own) ã®ããããã£ã ããã³ãã¼å
ãªãã¸ã§ã¯ãã«ã³ãã¼ãã¾ãããã®éãã³ãã¼å
ãªãã¸ã§ã¯ãã«ã¯ [[Get]]
ãã³ãã¼å
ãªãã¸ã§ã¯ãã«ã¯ [[Set]]
ã使ãã¾ãã®ã§ãã²ãã¿ã¼ã¨ã»ãã¿ã¼ãå¼ã³åºããã¨ã«ãªãã¾ããããã¯ããããã£ã®ä»£å
¥ (assign) ã§ãããããããã£ãã³ãã¼ãããæ°ããå®ç¾©ãããããã®ã¨ã¯ç°ãªãã¾ãããã®ãããã³ãã¼å
ã«ã²ãã¿ã¼ãåå¨ããå ´åãæ°ããããããã£ããããã¿ã¤ãã«ãã¼ã¸ããç¨éã«ã¯ä¸é©åã§ãããã
ããããã£å®ç¾©ã (åæå¯è½å±æ§ãå«ãã¦) ãããã¿ã¤ãã®ä¸ã«ã³ãã¼ããã«ã¯ããã®ã¡ã½ããã§ã¯ãªã Object.getOwnPropertyDescriptor()
㨠Object.defineProperty()
ã使ç¨ãã¦ãã ããã
String
㨠Symbol
ã®ä¸¡æ¹ã®ããããã£ãã³ãã¼ããã¾ãã
ã¨ã©ã¼ãçºçããå ´åãä¾ãã°ããããã£ãæ¸ãè¾¼ã¿ä¸å¯ã®å ´åã¯ã TypeError
ãçºçãã¾ãããã¨ã©ã¼ãçºçããåã«ããããã£ã追å ãããå ´åã target
ãªãã¸ã§ã¯ãã夿´ããããã¨ãããã¾ãã
ã¡ã¢: Object.assign()
ã¯ã³ãã¼å
ã®å¤ã null
ã undefined
ã§ãä¾å¤ãçºçããã¾ããã
const obj = { a: 1 };
const copy = Object.assign({}, obj);
console.log(copy); // { a: 1 }
ãã£ã¼ãã¯ãã¼ã³ã«ã¤ãã¦ã®æ³¨æ
ãã£ã¼ãã¯ãã¼ã³ãè¡ãå ´åãå¥ã« structuredClone()
ã®ãããªä»£æ¿ææ®µã使ç¨ããå¿
è¦ãããã¾ãã Object.assign()
ã¯ããããã£å¤ã®ã¿ãã³ãã¼ããããã§ãã
å ã®å¤ããªãã¸ã§ã¯ãã¸ã®åç §ã§ããå ´åãåç §ã®å¤ã®ã¿ãã³ãã¼ããã¾ãã
const obj1 = { a: 0, b: { c: 0 } };
const obj2 = Object.assign({}, obj1);
console.log(obj2); // { a: 0, b: { c: 0 } }
obj1.a = 1;
console.log(obj1); // { a: 1, b: { c: 0 } }
console.log(obj2); // { a: 0, b: { c: 0 } }
obj2.a = 2;
console.log(obj1); // { a: 1, b: { c: 0 } }
console.log(obj2); // { a: 2, b: { c: 0 } }
obj2.b.c = 3;
console.log(obj1); // { a: 1, b: { c: 3 } }
console.log(obj2); // { a: 2, b: { c: 3 } }
// ãã£ã¼ãã¯ãã¼ã³
const obj3 = { a: 0, b: { c: 0 } };
const obj4 = structuredClone(obj3);
obj3.a = 4;
obj3.b.c = 4;
console.log(obj4); // { a: 0, b: { c: 0 } }
ãªãã¸ã§ã¯ãã®ãã¼ã¸
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 is on obj's prototype chain.
{ foo: 1 },
{
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 is a read-only property
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) => {
const descriptors = Object.keys(source).reduce((descriptors, key) => {
descriptors[key] = Object.getOwnPropertyDescriptor(source, key);
return descriptors;
}, {});
// æ¢å®ã§ã¯ã Object.assign ã¯åæå¯è½ãªã·ã³ãã«ãã³ãã¼ãã
Object.getOwnPropertySymbols(source).forEach((sym) => {
const 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