我在w3schoool JavaScript cookie部分找到了这段代码,即读取cookie:
function getCookie(c_name)
{
if (document.cookie.length>0)
{
c_start = document.cookie.indexOf(c_name + "=");
if (c_start!=-1)
{
c_start = c_start + c_name.length+1;
c_end = document.cookie.indexOf(";",c_start);
if (c_end==-1) c_end = document.cookie.length;
return unescape(document.cookie.substring(c_start,c_end));
}
}
return "";
}
在这一行:
if (document.cookie.length > 0)
document.cookie.length
的含义是什么?
在这一行:
c_start = document.cookie.indexOf(c_name + "=");
为什么我需要在=
之后添加c_name(cookie name)
?
在这一行:
c_start = c_start + c_name.length+1;
为什么我需要添加c_name.length+1
?目的是什么?
这一行的含义是什么:
if (c_end==-1) c_end = document.cookie.length;
任何人都可以回答我的问题吗?感谢!!!
答案 0 :(得分:4)
document.cookie
返回包含cookie的字符串。你问的其他一切都是非常标准的javascript字符串操作。
if (document.cookie.length > 0)
检查字符串是否为空。
c_start = document.cookie.indexOf(c_name + "=");
查找字符串中第一次出现COOKIENAME=
子字符串的索引。
c_start = c_start + c_name.length + 1;
将索引放在字符串
中的cookie名称之后c_end = document.cookie.indexOf(";", c_start);
if (c_end == -1) c_end = document.cookie.length;
尝试从;
位置开始查找c_start
字符的第一个匹配项,如果找不到该字符,则会将其定位到字符串的末尾。
答案 1 :(得分:3)
请参阅:https://developer.mozilla.org/en/DOM/document.cookie
document.cookie是一个字符串,其中key = value对由分号(;)分隔。
您粘贴的代码会查找字符串中的特定键,然后通过查找字符串的结尾或下一个分号来查找其值,并返回找到的值
所以例如,如果document.cookie ===“someKey = aCookieMadeMeHaveValue7; anotherKey = aShorterValue”,你可以通过执行函数getCookie('someKey')搜索someKey的值,该函数将查看字符串,并返回'aCookieMadeMeHaveValue7'。
它会向该位置添加+1以跳过'=',然后从那里返回字符串,直到它第一次看到';'或者到了字符串的末尾。
答案 2 :(得分:0)
好的,快速回答。首先,document.cookie
是一个字符串,包含此域中每个Cookie集的key=value
对。
(1)if (document.cookie.length>0)
检查是否设置了一些cookie,即该字符串不为空。
(2)c_start=document.cookie.indexOf(c_name + "=");
需要=
以确保{cookie}值内的c_name
不会出现在密钥中。
(3)c_start=c_start + c_name.length+1;
c_start
是在字符串中找到密钥的位置。然后,您需要添加键的长度加一(对于=
)以查找值的开头。
(4)if (c_end==-1) c_end=document.cookie.length;
如果cookie是最后一个,则不会终止;
,所以我们会寻找字符串的最后一部分。
答案 3 :(得分:0)
document.cookie
是一个字符串,length
属性保存字符串的长度。
=
附加到cookie名称,因为cookie名称也可能出现在document.cookie
字符串中的其他位置(例如另一个cookie的cookie值)。使用c_name.length+1
是因为+1
反映了Cookie名称后面的=
。如果在大海捞针中找不到针,indexOf
会返回-1
;这就是c_end
与-1
进行比较的原因。
但是你不应该使用这个实现。看看my answer to Javascript getCookie functions,看看它为什么会出错,以及更好的实现方式。