qappleh / Interview

我是追梦赤子心,公众号「深圳湾码农」的作者,某上市集团公司高级前端开发,深耕前端领域多年,每天攻破一道题,带你从0到1系统构建web全栈完整的知识体系!

Home Page:https://github.com/qappleh/Interview

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

第54题(2019-10-10):实现一个函数clone,可以对JavaScript中的5种主要的数据类型(包括Number、String、Object、Array、Boolean)进行值复制

qappleh opened this issue · comments

commented
第54题(2019-10-10):实现一个函数clone,可以对JavaScript中的5种主要的数据类型(包括Number、String、Object、Array、Boolean)进行值复制
commented

考察点1:对于基本数据类型和引用数据类型在内存中存放的是值还是指针这一区别是否清楚
考察点2:是否知道如何判断一个变量是什么类型的
考察点3:递归算法的设计

// 方法一:
Object.prototype.clone = function(){ 
   var o = this.constructor === Array ? [] : {};
     for(var e in this){
       o[e] = typeof this[e] === "object" ? this[e].clone() : this[e];
     }
   return o;
}  

//方法二:
/** 
 * 克隆一个对象
 * @param Obj      
 * @returns    
 */ 
function clone(Obj) {
  var buf;
  if (Obj instanceof Array) {
    buf = [];                    
    //创建一个空的数组
    var i = Obj.length;
    
    while (i--) {
      buf[i] = clone(Obj[i]);
    }
    return buf;
  }  else if (Obj instanceof Object){
    buf = {};                   
    //创建一个空对象
    for (var k in Obj) {           
      //为这个对象添加新的属性
      buf[k] = clone(Obj[k]);
    }
    return buf;
  } else {                         
    //普通变量直接赋值32             
    return Obj;
  }
}