前端笔试小记

垃圾回收机制

由于字符串、对象和数组没有固定的大小,所以当他们的大小已知时,才能对衙门进行动态的存储分配。JavaScript程序每次创建字符串、数组或对象时,解释器都必须分配内存来存储那个实体。只要像这样动态分配了内存,最终都要释放这些内存以便他们能够被再用,否则,JavaScript解释器就会消耗完系统中所有可用内存,造成系统崩溃。

现在各大浏览器的垃圾回收有两种办法:标记清除、引用计数

标记清除
当变量进入环境时,将变量标记"进入环境",当变量离开环境时,标记为:“离开环境”。某一个时刻,垃圾回收器会过滤掉环境中的变量,以及被环境变量引用的变量,剩下的就是被视为准备回收的变量

JavaScript 中有个全局对象,浏览器中是 window。定期的,垃圾回收期将从这个全局对象开始,找所有从这个全局对象开始引用的对象,再找这些对象引用的对象…对这些活着的对象进行标记,这是标记阶段。清除阶段就是清除那些没有被标记的对象。

标记清除有一个问题,就是在清除之后,内存空间是不连续的,即出现了内存碎片。如果后面需要一个比较大的连续的内存空间时,那将不能满足要求。而标记-整理方法可以有效地解决这个问题。标记阶段没有什么不同,只是标记结束后,标记-整理方法会将活着的对象向内存的一边移动,最后清理掉边界的内存。不过可以想象,这种做法的效率没有标记-清除高。

引用计数
跟踪记录每个值被引用的次数。当声明一个变量并将引用类型的值赋给该变量时,则这个值的引用次数就是1。如果同一个值又被赋给另一个变量,则该值的引用次 数加1.相反,如果包含对这个值引用的变量又取得另外一个值,则这个值的引用次数减1.当这个值的引用次数变成0时,则说明没有办法访问这个值了,因此就 可以将其占用的内存空间回收回来。

		var a = {};     对象{}的引用计数为1
        b = a;          对象{}的引用计数为 1+1
        a = null;       对象{}的引用计数为2-1

js判断浏览器的类型

function WhatBrowser(){
    var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串
    console.log(userAgent) //可以将这个打印出来会很清晰的展示出浏览器的类型
    var isOpera = userAgent.indexOf("Opera") > -1;
    if (isOpera) {
        return "Opera"
    }; //判断是否Opera浏览器
    if (userAgent.indexOf("Firefox") > -1) {
        return "FF";
    } //判断是否Firefox浏览器
    if (userAgent.indexOf("Chrome") > -1){
  return "Chrome";
 }   //判断是否是chrome浏览器
    if (userAgent.indexOf("Safari") > -1) {
        return "Safari";
    } //判断是否Safari浏览器
    if (userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1 && !isOpera) {
        return "IE";
    }; //判断是否IE浏览器
}

cookies,sessionStorage 和 localStorage 的区别

cookie:

  1. 在设置cookie过期之前一直有效(无论窗口浏览器是否关闭)
  2. 正常情况下,cookies数据会自动传到服务器,服务器也可以写cookie到客户端
  3. <=4K

sessionStorage:

  1. 数据在当前浏览器关闭后删除。
  2. 不会发送数据到服务端
  3. 5M

localStorage:

  1. 持久存储,浏览器关闭后不会丢失除非主动删除
  2. 不会发送数据到服务端
  3. 20M

cookie

  1. HTTP Cookie简称cookie,在HTTP请求发送Set-Cookie HTTP头作为响应的一部分。通过name=value的形式存储
  2. cookie的构成:
    名称:name(不区分大小写,但最好认为它是区分的)
    值:value(通过URL编码:encodeURIComponent)

    路径
    失效时间:一般默认是浏览器关闭失效,可以自己设置失效时间
    安全标志:设置安全标志后只有SSL连接的时候才发送到服务器
  3. cookie的作用:主要用于保存登录信息
  4. 生命期为只在设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭。 存放数据大小为4K左右 。有个数限制(各浏览器不同),一般不能超过20个。与服务器端通信:每次都会携带在HTTP头中,如果使用cookie保存过多数据会带来性能问题
  5. cookie的优点:具有极高的扩展性和可用性
    通过良好的编程,控制保存在cookie中的session对象的大小
    通过加密和安全传输技术,减少cookie被破解的可能性
    只有在cookie中存放不敏感的数据,即使被盗取也不会有很大的损失
    控制cookie的生命期,使之不会永远有效。这样的话偷盗者很可能拿到的就 是一个过期的cookie
  6. cookie的缺点:
    cookie的长度和数量的限制。每个domain最多只能有20条cookie,每个cookie长度不能超过4KB,否则会被截掉
    安全性问题。如果cookie被人拦掉了,那个人就可以获取到所有session信息。加密的话也不起什么作用
    有些状态不可能保存在客户端。例如,为了防止重复提交表单,我们需要在服务端保存一个计数器。若吧计数器保存在客户端,则起不到什么作用

你可能感兴趣的:(前端笔试小记)