首页 > 开发 > JavaScript > 正文

Js操作HTTP Cookie

2020-03-24 17:59:40
字体:
来源:转载
供稿:网友





谷歌在网页未发布时,不能存放cookie,火狐不存在这样的问题
一般的键名不用中文
上面的格式可以换做document.cookie = 'myname='+ data;
注意传递的是天数,如果传递的是当天的话,会存储不上设置cookie过期时间,时间超过了,cookie并不是被删除了,只是不进行显示,还是保存在电脑上。这里目前还是没有应用到,但是肯定很有用
还包含了一种情况,保存的本地磁盘上,然后再进行覆盖





这是我自己的理解,行间事件中已经有要执行的函数,代码执行,在全局作用域中找不到该函数,会报错,但是可以将上面的过程理解为给onclick属性赋值,首先赋值为function(){del(this)} ,然后赋值为function(){console.log(this)},报错的那一步直接别覆盖了,但是还是不符合逻辑,记得JS代码只要执行到有错误的地方,就不会再执行了

总结1:


浏览器有一个监听机制,监听事件,常见的事件有onclick、ondblclick、onfocus、onblur,这些都是浏览器时刻监听的事件,上面函数的过程相当于给事件赋值,不过所赋值为一个函数,但是也可以理解为一个值,老师所说的JS其实就是一个取值与赋值的过程,上面的过程很好的解释了这一点。


上面都是很大胆的尝试,但是还是对取值与赋值的理解。可以看到一个细节,window.onload=function(){}前面的onload是变色了的。Console.log(window);可以发现其中的onload值本身就是null



这样来书写,并不会出现错误,也就证明在btn下也是有一个类似于window下的各种属性,这只是猜测,因为在控制台上值能输出window的实行,却看不到btn下的属性,这里是可以和动态创建属性联系起来。


属性归属于对象,上面的onclick是一个btn对象下的属性,上面的过程是在属性里面存了一个值,而这个值是一个匿名函数,然后这个属性就变成了一个匿名函数,然后这个函数就可以进行调用,函数名就是之前的属性名。属性其实和变量没有什么区别,属性是有一个对象归属的,就是他前面的对象,而且有属性的对象现在我理解的就是可以看做是元素对象,对象后面加上一个属性,属性名就相当于变量名,函数也是一个数据类型,之前在学习创建变量的时候,可以在变量中存null,number,string,boolean,undefined,现在的函数也是一种数据类型,于是在变量中存入一个function也是可以的


函数执行到这里相当于给btn下的onclick属性赋值,所赋的值是一个函数。于是onclick就变成了一个函数,
函数执行到这里相当于调用了刚刚在btn里存入的函数
这里的问题和我上面发现的问题是一样的,初始值是null,只有在存入object类型的值时,才可以成功的传入。下面使用到的是动态创建属性,在对象btn下动态创建了一个属性,现在是没有变量类型的要求的,可以传入任意类型的变量值,但是动态创建属性和上面的对象已经内置的属性是有相似之处的,可以这样理解。
这就是动态创建属性,现在在window对象下多了一个index属性,相当于之前window下自带的属性onload之类的。
打印出来的数据类型是function,其实function也是一个数据,可以给变量赋值,也可以给属性赋值,如果是单单的写:对象.属性,这样的话返回的就是属性里面装的值,也就是属性值,而在上面给属性传的值时一个函数,于是就将这个函数完整的返回出来。最后面的情况,对象.属性名后面加上(),就相当于调用了函数,这和下面创建的有名函数由一点区别,但是还是可以理解的,估计是默认的属性名就是函数名。属性和变量是一样的,里面可以装载各种数据类型的值,function也是一种变量,如果是将function装进了属性或者是变量,那么这个属性或者是变量就变成了一个函数
这是对上面的解释,给变量a传入了一个函数,那么a久变成了一个函数,打印变量,返回的就是函数的执行上下文,下面就相当于调用了函数a,现在就可以知道,其实上面的给属性传递一个函数,和这里是一个意思,直接使用btn.a(),也就是理所当然的了。
直接传入函数名,打印出来的是函数的执行上下文,但是上面再调用对象下的函数时,并不是单纯的写函数名,而是要加上属性所对应的对象。
上面的代码是有两个意思,一是给对象btn的onclick属性传递一个函数,二是在浏览器上调用的时候执行这个传递的函数,而下面是直接自己调用上面的函数,二不是浏览器来调用该函数。属性的赋值和取值,变量的赋值和取值,其实是完全一样的
上面是取值的过程,获得是的函数的执行上下文,下面是赋值的过程,存在属性里面的值取出来赋给a,也就是赋值,将函数的执行上下文赋值给a。
这是整个分析的重点部分,调用函数a,就会执行到console.log(this),打印出来的是window,现在的this指向已经发生改变
现在是在全局作用域下创建了一个变量,然后给变量传入一个函数,这时候变量也就变成了函数,然后在全局作用域下执行调用,前面的window是可以省略的。
这是今天所学最精髓的地方,onclick()是一个函数,a()是一个函数,函数都是由对象来调用的,onclick所归属的对象就是btn,a所归属的是对象是window,就是这么简单,amazing!同时也可以总结出来一个知识点,结合上面的,在全局作用域下创建了一个函数a,该函数就归属于window,然后打印window的时候就可以看到多了一个属性a,属性值就是该函数的执行上下文,这里是和动态创建属性是没有区别的,完全一样。
这是最精简的操作,现在在window中也是可以看到新的属性index,中间的代码就是省略的步骤,这就是为什么这里和动态创建属性没有一点区别,真的完全是一样的。

这是new关键字的影响,只是一个简单的了解
在浏览器中的显示:index:function index() aindex:function()上面的过程都是在全局作用域下创建了函数,一个是匿名函数,一个是有名函数,但是在也可以理解为在window下动态创建了属性,但是这里有一点跳跃,一个属性名为index,一个为aindex,唯一的区别就是前者有自己的函数名
<input type="button" id="btn" html' target='_blank'>value="按钮" onclick="del(this)" / 这是上面代码的返回值
现在上面的代码在点击的时候返回的是window
点击按钮会弹出ok,最重要的是知道在解释器中的代码是怎么样的情况,下面的代码就是解释器中会执行的代码,创建了一个匿名函数,执行代码

行间事件只能调用全局作用域下的函数
现在显示的是window,这是this指向的问题,现在也是简单的了解
上面这段代码,用老师上面讲的知识,是解释不通的,现在创建的函数并不是在全局作用域下,可能是自己的理解出错
点击按钮之后会发现有一个函数,就会向上查找,上面就是全局作用域,在全局作用域中找不到该函数的创建,就会报错,这是作用域链的问题,遵循向上查找。解释器在加载行间事件的时候,就会将行间事件加载到全局作用域下,所以会有“行间事件只能调用全局作用域下的函数”。总结2:
上面结果的对比,window对象下属性的属性值几乎全是function,而document下几乎都是具体的值,而且显示的document对象是#document,加载的是整个html文档封装函数:创建cookie 、删除cookie、获取cookie的value值
现在返回的是空,就算是执行了点击li,也是不会执行释放的
代码自动执行,返回四次空,点击无效
每次点击,a就会被重新赋值,这样的话,就实现了理想的累加效果上面的问题就是函数在执行完之后,变量会被释放的问题,这样在函数执行时保存在函数里面的值,每次都会被释放,在函数外面打印也就是无效的。还有一点就是上面的模式是很像的,在dom下通常会使用一个for来添加事件,为的是提供一个i的值,找到指定的子元素,与传统的for循环是有区别的。而且这里和循环是没有一点联系的。上面的的代码可以理解为,在事件函数内部,变量是不会被释放的,但是一旦出了事件函数保存的变量就会被释放。还有就是定义出事值得问题,看了这么多的代码,感觉遇到这样的模式,代码都是一样的,定义的初始值总是在事件函数的外部,这里的理解可以和for循环是一样的,因为之前的for循环也是将初始的变量放在外面,唯一的区别就是在for循环中,变量是不会被释放的,出来for循环也还是会访问到原来的变量。
代码执行完,每次点击li的话,只会执行,中间的一段代码,而下面的代码console.log(getCookie())是不会被执行到的,只有是再次刷新界面才会得到自己想要的打印值

下面的写法是自己试出来的,但是很经典,按照代码的执行顺序,自己试可以理解的,如果积累足够多的经验的话,相信一切都会变的简单。
这是很基础的知识,但是自己还是不会,二者返回的都是oK ,上面包含了隐式类型转换,这是最基础的知识。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表