js封装cookie 实现cookie的设置、获取和删除

设置+获取 cookie

 1         // 设置和获取cookie
 2         // 把三个可选参数 放在options里。因为domain、path非必要的情况下不传,而expires的传的频率又比较高
 3         function cookie( name , value , options){
 4             // if参数大于一个且value 是一个字符串 ->那么我们认为此时我们在设置cookie
 5             if( arguments.length > 1 && typeof value === "string"){
 6                 // 1.设置cookie
 7                 // 让options不传参数的时候也是一个对象
 8                 if(!isObject( options )){
 9                     options = {};
10                 }
11                 // 如果 expires 传了的话
12                 if( typeof options.expires === "number"){
13                     // expires 参数的单位为天
14                     var d = new Date();
15                     d.setDate( d.getDate() + options.expires );
16                 }
17                 return (document.cookie = [
18                     // 操作必选参数name、value的字符串
19                     name + "=" + value,
20                     // 可选参数传了没? 传了就在必选参数的字符串后面拼接一下,没传就算了
21                     typeof options.expires === "number" ? ";expires=" + d : "",
22                     typeof options.domain === "string" ? ";domain=" + options.domain : "",
23                     typeof options.path === "string" ? ";path=" + options.path : "",
24                 ].join(""));//用join 把数组变成字符串
25             }
26             // 2.获取cookie
27             var cookie_string = document.cookie;
28             // 字符串拆分 
29             // 把一条cookie按属性拆分 这时候拆分是 分号 + 空格
30             var cookie_array  = cookie_string.split("; ");
31             for(var i = 0 ; i < cookie_array.length ; i ++){
32                 // 再拆分成2部分 cookie的key值 和 cookie 的value值
33                 // 0项是name  1项是value
34                 if( cookie_array[i].split("=")[0] === name ){
35                     // 如果找到了要找的name  就返回对应的value
36                     return cookie_array[i].split("=")[1]
37                 }
38             }
39             // 如果没找到 返回空字符串
40             return "";
41         }

删除cookie

 1         // 删除cookie 
 2         // 把过期时间 设置为前一天
 3         function removeCookie( name , options ){
 4             /*options 可以是对象 object/ 也可以是一个字符串"string"  
 5             1.如果他是对象了 里面就有数据,我们添加一个对象{expires : -1}。
 6                 为了把它放入要删除的对象里面,要把options和这个对象进行合并assign
 7             2.如果是一个字符串 把它变成对象 同理合并expires : -1
 8             */
 9             cookie( name ,"" ,  isObject( options ) ? assign( options , { expires : -1 }) : { path : options, expires : -1  })
10         }

两个小功能的封装

    1.判断是否是对象  isObject

    2.对象合并  assign

 1         // 判断是不是对象 
 2         function isObject( data ){
 3             return (typeof data === "object" && data !== null && data.constructor && data.constructor === Object)
 4             // 前两个逻辑 区分对象和null:判定数据类型必须为 "object" , data 不能为 null(因为typeof null === "object")
 5             // 后两个逻辑 区分数组和对象:存在 data.constructor 并且data.constructor是对象构造出来的(因为typeof [] 也是"object",但是arr.constructor 不是 Object,是Array)
 6         }
 7         // 对象合并
 8         function assign(){
 9             // 拿出第一个对象
10             var target = arguments[0];
11             // 其他对象合并到第一个对象中去
12             for(var i = 1 ; i < arguments.length ; i ++){
13                 // 其他对象的所有属性 都放到target里面
14                 for(var attr in arguments[i]){
15                     target[attr] = arguments[i][attr];
16                 }
17             }
18             return target;
19         }

 


测试功能:

1         // 设置cookie
2         cookie("test","hello");
3         cookie("test2","hello2",{
4             expires : 5,
5             path : "/php/"
6         });
7         // 获取cookie 的value值
8         var res = cookie("test2");
9         console.log(res);

猜你喜欢

转载自www.cnblogs.com/uuind/p/12672941.html