• 前端面试如何回答,这些题目或许可以给你一些提示


    new操作符的实现原理

    new操作符的执行过程:

    (1)首先创建了一个新的空对象

    (2)设置原型,将对象的原型设置为函数的 prototype 对象。

    (3)让函数的 this 指向这个对象,执行构造函数的代码(为这个新对象添加属性)

    (4)判断函数的返回值类型,如果是值类型,返回创建的对象。如果是引用类型,就返回这个引用类型的对象。

    具体实现:

    function objectFactory() {
       
      let newObject = null;
      let constructor = Array.prototype.shift.call(arguments);
      let result = null;
      // 判断参数是否是一个函数
      if (typeof constructor !== "function") {
       
        console.error("type error");
        return;
      }
      // 新建一个空对象,对象的原型为构造函数的 prototype 对象
      newObject = Object.create(constructor.prototype);
      // 将 this 指向新建对象,并执行函数
      result = constructor.apply(newObject, arguments);
      // 判断返回对象
      let flag = result && (typeof result === "object" || typeof result === "function");
      // 判断返回结果
      return flag ? result : newObject;
    }
    // 使用方法
    objectFactory(构造函数, 初始化参数);
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    为什么需要浏览器缓存

    对于浏览器的缓存,主要针对的是前端的静态资源,最好的效果就是,在发起请求之后,拉取相应的静态资源,并保存在本地。如果服务器的静态资源没有更新,那么在下次请求的时候,就直接从本地读取即可,如果服务器的静态资源已经更新,那么我们再次请求的时候,就到服务器拉取新的资源,并保存在本地。这样就大大的减少了请求的次数,提高了网站的性能。这就要用到浏览器的缓存策略了。

    所谓的浏览器缓存指的是浏览器将用户请求过的静态资源,存储到电脑本地磁盘中,当浏览器再次访问时,就可以直接从本地加载,不需要再去服务端请求了。

    使用浏览器缓存,有以下优点:

    • 减少了服务器的负担,提高了网站的性能
    • 加快了客户端网页的加载速度
    • 减少了多余网络数据传输

    如何防御 XSS 攻击?

    可以看到XSS危害如此之大, 那么在开发网站时就要做好防御措施,具体措施如下:

    • 可以从浏览器的执行来进行预防,一种是使用纯前端的方式,不用服务器端拼接后返回(不使用服务端渲染)。另一种是对需要插入到 HTML 中的代码做好充分的转义。对于 DOM 型的攻击,主要是前端脚本的不可靠而造成的,对于数据获取渲染和字符串拼接的时候应该对可能出现的恶意代码情况进行判断。
    • 使用 CSP ,CSP 的本质是建立一个白名单,告诉浏览器哪些外部资源可以加载和执行,从而防止恶意代码的注入攻击。
    1. CSP 指的是内容安全策略,它的本质是建立一个白名单,告诉浏览器哪些外部资源可以加载和执行。我们只需要配置规则,如何拦截由浏览器自己来实现。
    2. 通常有两种方式来开启 CSP,一种是设置 HTTP 首部中的 Content-Security-Policy,一种是设置 meta 标签的方式
    • 对一些敏感信息进行保护,比如 cookie 使用 http-only,使得脚本无法获取。也可以使用验证码,避免脚本伪装成用户执行一些操作。

    浏览器渲染优化

    (1)针对JavaScript: JavaScript既会阻塞HTML的解析,也会阻塞CSS的解析。因此我们可以对JavaScript的加载方式进行改变,来进行优化:

    (1)尽量将JavaScript文件放在body的最后

    (2) body中间尽量不要写