类型包括:Number、String、Object、Arrary、Boolean

  1. function clone(obj) {
  2. let result;
  3. switch (typeof obj) {
  4. case 'undefined':
  5. break;
  6. case 'string':
  7. result = obj + '';
  8. break;
  9. case 'number':
  10. result = obj + 0;
  11. break;
  12. case 'boolean':
  13. result = obj;
  14. break;
  15. case 'object':
  16. if (obj === null) result = null;
  17. else {
  18. if (Object.prototype.toString.call(obj).slice(8, -1) === 'Array') {
  19. result = [];
  20. for (let i = 0; i < obj.length; i++) {
  21. result.push(clone(obj[i]));//递归
  22. }
  23. }
  24. else {
  25. result = [];
  26. for (let k in obj) {
  27. result[k] = clone(obj[k]);
  28. }
  29. }
  30. }
  31. break;
  32. default:
  33. result = obj;
  34. break;
  35. }
  36. return result;
  37. }