fork(1) download
  1. function deepCopy(object) {
  2. if (object instanceof Date) {
  3. return new Date(+object);
  4. }
  5. var copy = Array.isArray(object) ? [] : {};
  6. for (var key in object) {
  7. if (object.hasOwnProperty(key)) {
  8. if (typeof object[key] == "object") {
  9. copy[key] = deepCopy(object[key]);
  10. } else {
  11. copy[key] = object[key];
  12. }
  13. }
  14. }
  15. return copy;
  16. }
  17.  
  18.  
  19. var a = { x: 1, y: 2, z: [[2, 2, 8], 2, 3], w: new Date(2014, 1, 1, 12, 0, 0) };
  20. var b = deepCopy(a); // b — это отдельный объект
  21. /*
  22. console.log(a);
  23. console.log(b);
  24. */
  25. b.x = 10;
  26. console.log(a.x); // 1
  27.  
  28. // a.z и b.z указывают на разные массивы:
  29. b.z.push(4);
  30. console.log(a.z); // [1, 2, 3]
  31.  
  32. // a.w и b.w независимы друг от друга
  33. b.w.setFullYear(2015);
  34. console.log(a.w.getFullYear()); // 2014
  35.  
  36. b.z[0].push(4);
  37. console.log(a.z[0]);
Success #stdin #stdout 0.06s 20312KB
stdin
Standard input is empty
stdout
1
[ [ 2, 2, 8 ], 2, 3 ]
2014
[ 2, 2, 8 ]