Javascript 在这段代码中while和for循环if语句的用途是什么?
我试图理解JavaScript中Cookies的概念。为此,我试图从以下方面理解此代码的工作原理: 即使我在Javascript 在这段代码中while和for循环if语句的用途是什么?,javascript,cookies,Javascript,Cookies,我试图理解JavaScript中Cookies的概念。为此,我试图从以下方面理解此代码的工作原理: 即使我在setCookie函数(exdays*2000)中将过期日期更改为过去的日期,它仍然显示“欢迎使用XYZ”消息。这意味着Cookie不会被删除。但是当我在不同的浏览器中运行相同的代码时,它会被删除。为什么会这样 疑问1。循环的目的 所有cookie都保存为分号分隔的键值(实际上它是分号和空格;)。键和值之间用等于(=)符号分隔。通过迭代,您将检查所有键,并仅返回与传递给方法的参数匹配的键的
setCookie
函数(exdays*2000
)中将过期日期更改为过去的日期,它仍然显示“欢迎使用XYZ”消息。这意味着Cookie不会被删除。但是当我在不同的浏览器中运行相同的代码时,它会被删除。为什么会这样
疑问1。循环的目的
所有cookie都保存为分号分隔的键值(实际上它是分号和空格;
)。键和值之间用等于(=
)符号分隔。通过迭代,您将检查所有键,并仅返回与传递给方法的参数匹配的键的值
疑问2。if的目的
检查迭代中的当前键是否包含传递给方法的cookie名称
疑问3。while循环的目的
while (c.charAt(0)==' ') c = c.substring(1);
逐个删除所有空格。实际上,使用trim()
方法可以很容易地改进这一点
//while (c.charAt(0)==' ') c = c.substring(1);
c = c.trim();
疑问4。“返还目的”
如果没有找到值,则返回一个空字符串,而不是用户必须检查null
或未定义的
即使我在setCookie中将过期日期更改为过去的日期
函数(exdays*2000),仍显示“欢迎使用XYZ”
消息这意味着Cookie不会被删除。但当我运行相同的
在其他浏览器中的代码,它将被删除。为什么会这样
当您在同一个浏览器上第二次打开该页面时,可能不会执行setCookie方法(假设您没有共享任何fiddle)
疑问1。循环的目的
所有cookie都保存为分号分隔的键值(实际上它是分号和空格;
)。键和值之间用等于(=
)符号分隔。通过迭代,您将检查所有键,并仅返回与传递给方法的参数匹配的键的值
疑问2。if的目的
检查迭代中的当前键是否包含传递给方法的cookie名称
疑问3。while循环的目的
while (c.charAt(0)==' ') c = c.substring(1);
逐个删除所有空格。实际上,使用trim()
方法可以很容易地改进这一点
//while (c.charAt(0)==' ') c = c.substring(1);
c = c.trim();
疑问4。“返还目的”
如果没有找到值,则返回一个空字符串,而不是用户必须检查null
或未定义的
即使我在setCookie中将过期日期更改为过去的日期
函数(exdays*2000),仍显示“欢迎使用XYZ”
消息这意味着Cookie不会被删除。但当我运行相同的
在其他浏览器中的代码,它将被删除。为什么会这样
当您在同一个浏览器上第二次打开该页面时,可能不会执行setCookie方法(假设您没有共享任何fiddle) 疑问1。循环的目的
Cookie存储为单行字符串,如下所示:
"Cookie_1=Cookie_value1; Cookie_2=Cookie_value2; Cookie_3=Cookie_value3; Cookie_4=Cookie_value4;"
然后将其拆分为具有
var ca = document.cookie.split(';');
所以ca的值现在是[“Cookie\u 1=Cookie\u value1”、“Cookie\u 2=Cookie\u value2”、“Cookie\u 3=Cookie\u value3”、“Cookie\u 4=Cookie\u value4”,“”]
对于数组的每个成员,可以将其视为cookie“实体”
疑问3。while循环的目的
如果查看ca
数组中的值,您将看到Cookie 2的值为“Cookie\u 2=Cookie\u value2”
。我们需要修剪一些前导空间,这就是while循环的目的
while (c.charAt(0)==' ') c = c.substring(1);
疑问2。if的目的
修剪前导空格后,您可以检查cookie名称是否与您要查找的名称匹配。
例如,“Cookie\u 3=Cookie\u value3”。indexOf(“Cookie\u 3=”)
等于0
疑问4。“返还目的”;
如果找不到指定的cookie名称,这只是要返回的默认值,类似于switch case中的case默认值。1。循环的目的
Cookie存储为单行字符串,如下所示:
"Cookie_1=Cookie_value1; Cookie_2=Cookie_value2; Cookie_3=Cookie_value3; Cookie_4=Cookie_value4;"
然后将其拆分为具有
var ca = document.cookie.split(';');
所以ca的值现在是[“Cookie\u 1=Cookie\u value1”、“Cookie\u 2=Cookie\u value2”、“Cookie\u 3=Cookie\u value3”、“Cookie\u 4=Cookie\u value4”,“”]
对于数组的每个成员,可以将其视为cookie“实体”
疑问3。while循环的目的
如果查看ca
数组中的值,您将看到Cookie 2的值为“Cookie\u 2=Cookie\u value2”
。我们需要修剪一些前导空间,这就是while循环的目的
while (c.charAt(0)==' ') c = c.substring(1);
疑问2。if的目的
修剪前导空格后,您可以检查cookie名称是否与您要查找的名称匹配。
例如,“Cookie\u 3=Cookie\u value3”。indexOf(“Cookie\u 3=”)
等于0
疑问4。“返还目的”;
如果找不到指定的cookie名称,这只是要返回的默认值,类似于switch case中的case默认值。谢谢。这消除了我的前三个疑虑。我还是不明白疑问4。请同时回答问题末尾的问题。谢谢。这消除了我的前三个疑虑。我还是不明白疑问4。请同时回答问题末尾的问题。请回答问题。请检查:尝试将有效期更改为过去。它仍然显示欢迎信息。请使用相同的浏览器。@VikasKumar此代码正在检查cookie是否存在。只有当它不存在时,它才调用setCookie方法,否则它将返回cookie的值。所以,这个方法一开始并没有被调用,所以它可能是在检索我使用(exdays*24*60*60*1000)保存的cookie的早期值。。。并且没有将新cookie设置为过期(exdays*2000)?我说的对吗?还有最后一个问题:“到期时间”是饼干吗?还是我