JS封装深拷贝、数组去重、获取和设置cookie方法

深拷贝:针对的是数组、对象,因为数组和对象是引用类型,直接利用“=”进行拷贝,则拷贝的只是对象或数组在堆中的地址,这相当于浅拷贝,即新、旧对象或数组任一个修改值,新、旧对象或数组都会受到影响。深拷贝就是要做到新立门户,生成一个全新的对象或数组,只是内容相同而已,这样的话,谁改变都不再影响对方,不再有任何瓜葛。

  function deepClone(Obj) {
    
    
        var buf
        if (Obj instanceof Array) {
    
    
          buf = []
          let i = 0
          while (i < Obj.length) {
    
    
            buf[i] = deepClone(Obj[i])
          }
          return buf
        } else if (Obj instanceof Object) {
    
    
          buf = {
    
    }
          for (let key in Obj) {
    
    
            buf[key] = deepClone(Obj[key])
          }
          return buf
        } else {
    
    
          return Obj
        }
      }

每次buf都初始化为一个[]{},这将会在堆中创建新的空间,再将原对象或数组中的属性、属性值拷贝过来就行。

数组去重: 该方法只是对基本类型的数据进行去重,没有实现对引用类型数据去重。

Array.prototype.distinct = function () {
    
    
        var result = []
        var flag = false //主要用于判断数组中是否出现了“NAN”,如果出现了则设置为true,因为NAN!=NAN,所以只能通过标记法判断是否出现过NAN
        for (let i = 0; i < this.length; i++) {
    
    
          if (this[i] != this[i]) {
    
    
            //就是用来检测NAN的,只有它NAN!=NAN
            if (!flag) {
    
    
              result.push(this[i])
              flag = true
            }
          } else {
    
    
            if (result.indexOf(this[i]) === -1) {
    
    
              result.push(this[i])
            }
          }
        }
        return result
      }
      var arr = [2,null,3,4,NaN,2,3,6,8,4,NaN,undefined,undefined,null,6,]
      console.log(arr.distinct())

在这里插入图片描述

获取和设置cookie:

// 创建cookie
function setCookie(name, value, expires, path, domain, secure) {
    
    
    var cookieText = encodeURIComponent(name) + '=' + encodeURIComponent(value)+';';
    if (expires instanceof Date) {
    
    
        cookieText += 'expires=' + expires+';';
    }
    if (path) {
    
    
        cookieText += "path=" + path+';'    }
    if (domain) {
    
    
        cookieText += 'domain=' + domain+';';
    }
    if (secure) {
    
    
        cookieText += 'secure'+';';
    }
    document.cookie = cookieText;
}
// 获取cookie
function getCookie(name) {
    
    
    var cookieName = encodeURIComponent(name) + '=';
    var cookieStart = document.cookie.indexOf(cookieName);
    var cookieValue = null;
    if (cookieStart > -1) {
    
    
        var cookieEnd = document.cookie.indexOf(';', cookieStart);
        cookieValue = decodeURIComponent(document.cookie.substring(cookieStart + cookieName.length, cookieEnd));
    }
    return cookieValue;
}
// 删除cookie
function unsetCookie(name) {
    
    
    document.cookie = name + "= ; expires=" + new Date(0);
}
  1. 创建cookie就是将cookie相关的信息拼接成一个字符串,然后通过document.cookie保存。
  2. 获取cookie就是在document.cookie中找到cookieName所在的位置,cookieName所在的位置cookieStart通过indexOf查找,找不到则说明不存在该cookie;找到之后,再通过indexOf()从cookieStart下标开始找到第一个';',那么中间这一段就是cookieValue了。
  3. 删除cookie只需给它的expires设置为一个过期的时间即可。

猜你喜欢

转载自blog.csdn.net/weixin_43334673/article/details/111300044