深拷贝:针对的是数组、对象,因为数组和对象是引用类型,直接利用“=”进行拷贝,则拷贝的只是对象或数组在堆中的地址,这相当于浅拷贝,即新、旧对象或数组任一个修改值,新、旧对象或数组都会受到影响。深拷贝就是要做到新立门户,生成一个全新的对象或数组,只是内容相同而已,这样的话,谁改变都不再影响对方,不再有任何瓜葛。
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);
}
- 创建cookie就是将cookie相关的信息拼接成一个字符串,然后通过document.cookie保存。
- 获取cookie就是在document.cookie中找到cookieName所在的位置,cookieName所在的位置cookieStart通过indexOf查找,找不到则说明不存在该cookie;找到之后,再通过indexOf()从cookieStart下标开始找到
第一个';'
,那么中间这一段就是cookieValue了。 - 删除cookie只需给它的expires设置为一个过期的时间即可。