常见前端面试题02

堆栈内存+闭包作用域

堆:存储引用类型值的空间
栈:存储基本类型值和指定代码的环境
在这里插入图片描述
答案:培训,对象的key数字和字符串等效

在这里插入图片描述
答案:珠峰,Symbol的特点,都是唯一的
在这里插入图片描述
答案:培训,key会转化成字符串[Obejct object]
在这里插入图片描述
答案:‘4’,alert弹出的会转化成字符串
在这里插入图片描述
答案:‘1’ ‘4’。
在这里插入图片描述

深拷贝浅拷贝

引用数据类型一般的操作,如直接赋值,展开运算符都是进行了浅拷贝
如果引用数据类型结构只有一层,可以用循环来进行深拷贝,或者用JSON.stryfing 来进行深拷贝。
但使用转化为字符串的办法,当咱们数据里有函数以及正则的时候,会出现问题,所以这种方法是有局限性的。

我们可以利用一个第三方的包来进行深拷贝,lodash里提供了进行深拷贝的api。
我们来简单的实现的实现一个深拷贝函数。

 function deepCopy(obj) {
        let newObj = new Object();
        if (typeof obj !== "object") return obj;
        if (typeof obj == null) return null;
        if (obj instanceof RegExp) {
          return new RegExp(obj);
        }
        if (obj instanceof Date) {
          return new Date(obj);
        }
        for (let key in obj) {
          if (obj.hasOwnProperty(key)) {
            newObj[key] = deepCopy(obj[key]);
          }
        }
      }
posted @ 2020-10-08 11:17  jacksonni  阅读(106)  评论(0编辑  收藏  举报