前端面试题 - 赋值/浅拷贝/深拷贝的区别?如何实现一个深拷贝?

  • 赋值是拷贝的对象指针,整个对象都是共用的。
  • 浅拷贝是拷贝一层,对象的内容仍是共用的,Object.assign(),拓展运算符都是浅拷贝。
  • 深拷贝是递归拷贝深层次,JSON.stringify()是深拷贝,但是会忽略undefined、symbol和函数。

    // 一个简单的深拷贝
    function clone(target) {
      if (typeof target === 'object') {
          let cloneTarget = Array.isArray(target) ? [] : {}; // 考虑数组
          for (const key in target) {
              cloneTarget[key] = clone(target[key]);
          }
          return cloneTarget;
      } else {
          return target;
      }
    };

    通俗易懂的前端面试题网站: https://www.front-interview.com


Bloodshot
2 声望0 粉丝