Javascript 在这段代码中while和for循环if语句的用途是什么?

Javascript 在这段代码中while和for循环if语句的用途是什么?,javascript,cookies,Javascript,Cookies,我试图理解JavaScript中Cookies的概念。为此,我试图从以下方面理解此代码的工作原理: 即使我在setCookie函数(exdays*2000)中将过期日期更改为过去的日期,它仍然显示“欢迎使用XYZ”消息。这意味着Cookie不会被删除。但是当我在不同的浏览器中运行相同的代码时,它会被删除。为什么会这样 疑问1。循环的目的 所有cookie都保存为分号分隔的键值(实际上它是分号和空格;)。键和值之间用等于(=)符号分隔。通过迭代,您将检查所有键,并仅返回与传递给方法的参数匹配的键的

我试图理解JavaScript中Cookies的概念。为此,我试图从以下方面理解此代码的工作原理:

即使我在
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)?我说的对吗?还有最后一个问题:“到期时间”是饼干吗?还是我