ãªãã¸ã§ã¯ãã¨ããªããã£ãã®åºæ¬çãªéãã®ï¼ã¤ã¯ããªãã¸ã§ã¯ã㯠âåç §ã«ãã£ã¦â æ ¼ç´ããããã³ãã¼ããããã¨ã§ããããã«å¯¾ãã¦ãããªããã£ãå¤(æååãæ°å¤ãçå½å¤ ãªã©)ã¯ã常㫠âå¤â ã¨ãã¦ã³ãã¼ããã¾ãã
å¤ãã³ãã¼ããã¨ãã«ä½ãèµ·ãã¦ããã®ãå°ã詳ããã¿ããã¨ã§ãç°¡åã«çè§£ã§ãã¾ãã
æååã®ãããªãããªããã£ãããå§ãã¾ãããã
ããã§ã¯ãmessage ã®ã³ãã¼ã phrase ã«æ ¼ç´ãã¾ãã:
let message = "Hello!";
let phrase = message;
çµæã2ã¤ã®ç¬ç«ãã夿°ãã§ãã¾ãããããããæåå "Hello!" ãæ ¼ç´ãã¦ãã¾ãã
ã¨ã¦ãæç½ãªçµæã§ããã
ãªãã¸ã§ã¯ãã¯ããã§ã¯ããã¾ããã
ãªãã¸ã§ã¯ãã«å²ãå½ã¦ããã夿°ã¯ããªãã¸ã§ã¯ãèªä½ã§ã¯ãªããâã¡ã¢ãªä¸ã®ã¢ãã¬ã¹âãè¨ãæããã¨ãªãã¸ã§ã¯ãã¸ã® âåç §â ãæ ¼ç´ãã¾ãã
ãã®ãããªå¤æ°ã®ä¾ãè¦ã¦ã¿ã¾ããã:
let user = {
name: "John"
};
ããã¦ãããã¯ã¡ã¢ãªä¸ã«å®éã«ã©ã®ããã«æ ¼ç´ããã¦ãããã示ãã¾ã:
ãªãã¸ã§ã¯ãã¯ã¡ã¢ãªä¸ã®ã©ããï¼å³ã®å³å´ï¼ã«æ ¼ç´ãããuser 夿°ï¼å³ã®å·¦å´ï¼ã¯ãããã¸ã® âåç
§â ãæã¡ã¾ãã
user ã®ãããªãªãã¸ã§ã¯ã夿°ã¯ããªãã¸ã§ã¯ãã®ã¢ãã¬ã¹ãè¨è¼ãããç¨ç´ã¨èãããã¨ãã§ãã¾ãã
ãªãã¸ã§ã¯ãã¸ã®ã¢ã¯ã·ã§ã³ãè¡ãéï¼ä¾ãã° ãããã㣠user.name ãåå¾ããï¼JavaScript ã¨ã³ã¸ã³ã¯ãã®ã¢ãã¬ã¹ã«ãããã®ãè¦ã¦ãå®éã®ãªãã¸ã§ã¯ãä¸ã§æä½ãå®è¡ãã¾ãã
ãããéè¦ãªçç±ã§ãã
ãªãã¸ã§ã¯ã夿°ãã³ãã¼ãããå ´åãåç §ã¯ã³ãã¼ããã¾ãããããªãã¸ã§ã¯ãèªä½ã¯è¤è£½ããã¾ããã
ä¾:
let user = { name: "John" };
let admin = user; // åç
§ã®ã³ãã¼
ä»ãï¼ã¤ã®å¤æ°ãããããããããåããªãã¸ã§ã¯ãã¸ã®åç §ãä¿æãã¦ãã¾ã:
ã覧ã®éããä¾ç¶ã¨ãã¦1ã¤ã®ãªãã¸ã§ã¯ãã§ãããä»ã¯ãã®ãªãã¸ã§ã¯ããåç §ãã¦ãã夿°ã¯2ã¤ã§ãã
ã©ã¡ãã®å¤æ°ã使ç¨ãã¦ãããªãã¸ã§ã¯ãã«ã¢ã¯ã»ã¹ã§ãããã®å 容ã夿´ãããã¨ãã§ãã¾ã:
let user = { name: 'John' };
let admin = user;
admin.name = 'Pete'; // "admin" ã®åç
§ã§å¤æ´ããã¾ãã
alert(user.name); // 'Pete', "user" ã®åç
§ããã夿´ã確èªã§ãã¾ã
ããã¯ãï¼ã¤ã®éµããããã£ããããã§ããã®ãã¡ã®1ã¤ï¼adminï¼ã使ç¨ãã¦ä¸èº«ãåå¾ããã夿´ãããã®ããã«æãããã¨ãã§ãã¾ãããã®å¾ãå¥ã®éµï¼userï¼ã使ã£ã¦ãåããã£ãããããéãã夿´ãããã³ã³ãã³ãã«ã¢ã¯ã»ã¹ã§ãã¾ãã
åç §ã«ããæ¯è¼
2ã¤ã®ãªãã¸ã§ã¯ããçããã®ã¯ãããããåä¸ã®ãªãã¸ã§ã¯ãã§ããå ´åã®ã¿ã§ãã
ä¾ãã°ãããã§ã¯aã¨bã¯åããªãã¸ã§ã¯ããåç §ãã¦ããããããããã¯çããã¨ãããã¨ã«ãªãã¾ã:
let a = {};
let b = a; // åç
§ã®ã³ãã¼
alert( a == b ); // true, 両æ¹ã®å¤æ°ã¯åããªãã¸ã§ã¯ããåç
§ãã¦ãã¾ã
alert( a === b ); // true
ããã¦ã2ã¤ã®ç¬ç«ãããªãã¸ã§ã¯ãã¯çããã¯ããã¾ããããã¨ãã©ã¡ãã空ã§ãåãããã«è¦ããã¨ãã¦ãã§ã:
let a = {};
let b = {}; // 2ã¤ã®ç¬ç«ãããªãã¸ã§ã¯ã
alert( a == b ); // false
obj1 > obj2 ã®ãããªæ¯è¼ããããã¯å対ã«ããªããã£ã obj == 5 ã®ãããªæ¯è¼ã§ã¯ããªãã¸ã§ã¯ãã¯ããªããã£ãã«å¤æããã¾ããç§ãã¡ã¯ãªãã¸ã§ã¯ã夿ãã©ã®ããã«åä½ããã®ãããã®å¾ããã«å¦ã¶ã§ãããããã ããçå®ãè¨ãã¨ããã®ãããªæ¯è¼ã¯ã»ã¨ãã©å¿
è¦ã¨ããããé常ã¯ã³ã¼ãã®èª¤ãã§ãã
ã¯ãã¼ã³ã¨ãã¼ã¸, Object.assign
åè¨ã®ããã«ããªãã¸ã§ã¯ã夿°ã®ã³ãã¼ã¯ãåä¸ãªãã¸ã§ã¯ãã¸ã®åç §ããã1ã¤ä½ãã¾ãã
ãããããªãã¸ã§ã¯ããè¤è£½ããå¿ è¦ãããå ´åã¯ã©ãã§ããããï¼ç¬ç«ããã³ãã¼ãã¯ãã¼ã³ãä½ãã«ã¯ï¼
ããã¯å¯è½ã§ãããJavaScriptã«ã¯ã¯ãã¼ã³ã®ããã®çµã¿è¾¼ã¿ã¡ã½ããããªãããå°ãæéããããã¾ãããããããããå¿ è¦ã«ãªããã¨ã¯ã»ã¨ãã©ãªãã§ããããã»ã¨ãã©ã®å ´åãåç §ã«ããã³ãã¼ã§ååã ããã§ãã
ããããããæ¬å½ã«ãããããå ´åã¯ãæ°ãããªãã¸ã§ã¯ããä½ããããªããã£ããªã¬ãã«ã§ãã®ããããã£ãç¹°ãè¿ãã³ãã¼ãã¦ãããã¨ã§ãæ¢åã®ãã®ã®æ§é ãè¤è£½ããå¿ è¦ãããã¾ãã
ãã®ããã«ãªãã¾ã:
let user = {
name: "John",
age: 30
};
let clone = {}; // æ°ãã空ãªãã¸ã§ã¯ã
// ãã¹ã¦ã® user ããããã£ããã®ä¸ã«ã³ãã¼ãã¾ããã
for (let key in user) {
clone[key] = user[key];
}
// ä»ãclone ã¯å®å
¨ã«ç¬ç«ããã¯ãã¼ã³ã§ã
clone.name = "Pete"; // ãã®ä¸ã®ãã¼ã¿ã夿´
alert( user.name ); // ä¾ç¶ã¨ãã¦ãªãªã¸ãã«ã®ãªãã¸ã§ã¯ã㯠John
ã¾ãããã®ããã«ãObject.assign 颿°ã使ããã¨ãã§ãã¾ãã
æ§æã¯ããã§ã:
Object.assign(dest[, src1, src2, src3...])
- æåã®å¼æ°
destã¯ã¿ã¼ã²ããã¨ãªããªãã¸ã§ã¯ãã§ãã - ã¤ã¥ã弿°
src1, ..., srcN(å¿ è¦ãªã ã) ã¯å ã¨ãªããªãã¸ã§ã¯ãã§ãã - ãã¹ã¦ã®ãªãã¸ã§ã¯ã
src1, ..., srcNã®ããããã£ãdestã«ã³ãã¼ãã¾ããè¨ãæããã¨ã2ã¤ç®ããå§ã¾ãå ¨ã¦ã®å¼æ°ã®ããããã£ã¯ãæåã®å¼æ°ã®ãªãã¸ã§ã¯ãã«ã³ãã¼ããã¾ãã destãè¿ãã¾ãã
ä¾ãã°ãããã¤ãã®ãªãã¸ã§ã¯ãã1ã¤ã«ãã¼ã¸ããããã«ä½¿ãã¾ã:
let user = { name: "John" };
let permissions1 = { canView: true };
let permissions2 = { canEdit: true };
// permissions1 and permissions2 ã®ãã¹ã¦ã®ããããã£ã user ã«ã³ãã¼
Object.assign(user, permissions1, permissions2);
// now user = { name: "John", canView: true, canEdit: true }
ãããæ¢ã«åãããããã£åã®ãã®ããã£ã¦ããå ´åã䏿¸ããã¾ã:
let user = { name: "John" };
Object.assign(user, { name: "Pete" });
alert(user.name); // now user = { name: "Pete" }
ã¾ããåç´ãªã¯ãã¼ã³ãããå ´åã® for..in ã«ã¼ãå¦çãç½®ãæããããã«ãObject.assign ã使ããã¨ãã§ãã¾ãã
let user = {
name: "John",
age: 30
};
let clone = Object.assign({}, user);
ãã㯠user ã®ãã¹ã¦ã®ããããã£ã空ã®ãªãã¸ã§ã¯ãã«ã³ãã¼ããè¿ãã¾ãã
ä¾ãã°ãspread syntax clone = {...user} ã使ç¨ãããªã©ããªãã¸ã§ã¯ããã¯ãã¼ã³ããæ¹æ³ã¯ä»ã«ãããã¾ãããããã¯ãã¥ã¼ããªã¢ã«ã®å¾åã§èª¬æãã¾ãã
ãã¹ããããã¯ãã¼ã³
ä»ã¾ã§ã¯ãuser ã®ãã¹ã¦ã®ããããã£ãããªããã£ãã§ããã¨ä»®å®ãã¦ãã¾ããããããããã£ã¯ä»ã®ãªãã¸ã§ã¯ãã®åç
§ã«ãªããã¨ãããã¾ãããããã¯ã©ããªãã§ãããï¼
ãã®ãããªå ´åã§ã:
let user = {
name: "John",
sizes: {
height: 182,
width: 50
}
};
alert( user.sizes.height ); // 182
ä»ãuser.sizes ã¯ãªãã¸ã§ã¯ãã§ãããåç
§ã«ããã³ãã¼ãããããããclone.sizes = user.sizes ã¨ããã³ãã¼ã§ã¯ä¸ååã§ãããªã®ã§ãclone 㨠user ã¯åã sizes ãå
±æãã¾ã:
ãã®ããã«ãªãã¾ã:
let user = {
name: "John",
sizes: {
height: 182,
width: 50
}
};
let clone = Object.assign({}, user);
alert( user.sizes === clone.sizes ); // true, åããªãã¸ã§ã¯ã
// user 㨠clone 㯠sizes ãå
±æãã¾ã
user.sizes.width++; // 䏿¹ããããããã£ã夿´ãã¾ã
alert(clone.sizes.width); // 51, 仿¹ãã夿´ããçµæãè¦ãã¾ã
ãããä¿®æ£ããã«ã¯ãuser[key] ã®åå¤ã調ã¹ãããããªãã¸ã§ã¯ãã®å ´åã¯ãã®æ§é ãè¤è£½ããã¯ãã¼ã³ã®ã«ã¼ãã使ç¨ããå¿
è¦ãããã¾ãã ãã㯠âãã£ã¼ãã¯ãã¼ã³(ãã£ã¼ãã³ãã¼)â ã¨å¼ã°ãã¾ãã
ãã®å®ç¾ã®ããã«ã¯ãå帰ã使ç¨ããããããã¯ãè»è¼ªã®åçºæãããªãããã«ãä¾ãã°æ¢åã® JavaScript ã©ã¤ãã©ãªlodash ã«ãã_.cloneDeep(obj) ãå©ç¨ãããã¨ãã§ãã¾ãã
ãªãã¸ã§ã¯ããåç
§ã¨ãã¦æ ¼ç´ããéè¦ãªå¯ä½ç¨ã¯ãconst ã¨ãã¦å®£è¨ããããªãã¸ã§ã¯ãã¯å¤æ´ ã§ãã¾ã ã
ä¾:
const user = {
name: "John"
};
user.name = "Pete"; // (*)
alert(user.name); // Pete
è¡ (*) ã¯ã¨ã©ã¼ãèµ·ããããã«è¦ããããããã¾ããããããã§ã¯ããã¾ãããconst ã§ãã user ã¯ã常ã«åããªãã¸ã§ã¯ããåç
§ããªããã°ãªãã¾ãããããã®ãªãã¸ã§ã¯ãã®ããããã£ã¯èªç±ã«å¤æ´å¯è½ã ããã§ãã
ã¤ã¾ããconst user 㯠user=... ã®ããã«å
¨ä½ãè¨å®ãããã¨ããå ´åã«ã®ã¿ã¨ã©ã¼ã«ãªãã¾ãã
ã¨ã¯ãããã©ããã¦ããªãã¸ã§ã¯ãã®ããããã£ã宿°ã«ãããå ´åã¯ãããå¯è½ã§ãããå ¨ãç°ãªãã¡ã½ããã使ç¨ãã¾ããããã«ã¤ãã¦ã¯ãããããã£ãã©ã°ã¨ãã£ã¹ã¯ãªãã¿ ã®ç« ã§èª¬æãã¾ãã
Summary
ãªãã¸ã§ã¯ãã®å²ãå½ã¦ãã³ãã¼ã¯ãåç §ã«ãã£ã¦è¡ããã¾ããã¤ã¾ãã夿°ã«ã¯ âãªãã¸ã§ã¯ãã®å¤â ã§ã¯ãªãã å¤ã¸ã® âåç §â (ã¡ã¢ãªä¸ã®ã¢ãã¬ã¹)ãæ ¼ç´ããã¦ãã¾ããå¾ã£ã¦ããã®ãããªå¤æ°ãã³ãã¼ããããããã颿°ã®å¼æ°ã¨ãã¦æ¸¡ãã¨ããªãã¸ã§ã¯ããã®ãã®ã§ã¯ãªãããã®åç §ãã³ãã¼ããã¾ãã
ã³ãã¼ãããåç §ãä»ãããã¹ã¦ã®æä½ï¼ããããã£ã®è¿½å /åé¤ãªã©ï¼ã¯ãåãåä¸ã®ãªãã¸ã§ã¯ãã«å¯¾ãã¦å®è¡ããã¾ãã
âæ¬å½ã®ã³ãã¼â (ã¯ãã¼ã³) ãä½ãã«ã¯ãObject.assign ã使ã£ã âshallow copyâï¼æµ
ãã³ãã¼ããã¹ãããããªãã¸ã§ã¯ãã¯åç
§ãã³ãã¼ãããï¼ãè¡ããã _.cloneDeep(obj) ã®ãã㪠âdeep cloningâ 颿°ã使ãã¾ãã
ã³ã¡ã³ã
<code>ã¿ã°ã使ã£ã¦ãã ãããè¤æ°è¡ã®å ´åã¯<pre>ãã10è¡ãè¶ ããå ´åã«ã¯ãµã³ãããã¯ã¹ã使ã£ã¦ãã ãã(plnkr, JSBin, codepenâ¦)ã