获取对象类型

    1. function getType(obj){
    2. //tostring会返回对应不同的标签的构造函数
    3. var toString = Object.prototype.toString;
    4. var map = {
    5. '[object Boolean]' : 'boolean',
    6. '[object Number]' : 'number',
    7. '[object String]' : 'string',
    8. '[object Function]' : 'function',
    9. '[object Array]' : 'array',
    10. '[object Date]' : 'date',
    11. '[object RegExp]' : 'regExp',
    12. '[object Undefined]': 'undefined',
    13. '[object Null]' : 'null',
    14. '[object Object]' : 'object'
    15. };
    16. if(obj instanceof Element) {
    17. return 'element';
    18. }
    19. return map[toString.call(obj)];
    20. }
    21. //深拷贝的方法
    22. function deepClone(data){
    23. var type = getType(data);
    24. var obj;
    25. if(type === 'array'){
    26. obj = [];
    27. } else if(type === 'object'){
    28. obj = {};
    29. } else {
    30. //不再具有下一层次
    31. return data;
    32. }
    33. if(type === 'array'){
    34. for(var i = 0, len = data.length; i < len; i++){
    35. obj.push(deepClone(data[i]));
    36. }
    37. } else if(type === 'object'){
    38. for(var key in data){
    39. obj[key] = deepClone(data[key]);
    40. }
    41. }
    42. return obj;
    43. }
    44. //对象1
    45. var obj1={
    46. age:10,
    47. sex:"男",
    48. car:["奔驰","宝马","特斯拉","奥拓"],
    49. dog:{
    50. name:"大黄",
    51. age:5,
    52. color:"黑白色"
    53. }
    54. };
    55. //对象2 : 实现深拷贝
    56. var obj2 = {};
    57. for(var key in obj1){
    58. obj2[key] = deepClone(obj1[key])
    59. }
    60. console.log(obj2);

    image.png