我在javascript中进行cookie练习并开发了以下代码:
function getCookie(kname) {
var fullkeyname = kname + "=";
var fullcookie = document.cookie;
var acookies = fullcookie.split(";");
for (var i = 0; i < acookies.length; i++) {
var cookie = acookies[i];
while (acookies[i].charAt(0) == " ") { //THE ISSUE IS HERE
cookie = cookie.substring(1);
}
if(cookie.indexOf(fullkeyname) == 0) {
return cookie.substring(fullkeyname.length, cookie.length);
}
}
return "";
}
它没有工作,似乎上升和无限循环,所以我用&#34; document.write&#34;跟踪我的代码。在各个部分发现,如果我改变&#34;而&#34;条件它将如下工作:
function getCookie(kname) {
var fullkeyname = kname + "=";
var fullcookie = document.cookie;
var acookies = fullcookie.split(";");
for (var i = 0; i < acookies.length; i++) {
var cookie = acookies[i];
while (cookie.charAt(0) == " ") { //RIGHT HERE
cookie = cookie.substring(1);
}
if (acookies[i].indexOf(fullkeyname) == 0) {
return cookie.substring(fullkeyname.length, cookie.length);
}
}
return "";
}
现在我的代码按预期工作,但是我不知道为什么,因为我已经将cookie的值设置为&#34; cookie = acookies [i]&#34;如果我不使用&#34; cookie&#34;我不明白为什么它应该循环不稳定。变量。 问题是:为什么代码适用于我的&#34; cookie&#34;变量而不是&#34; acookies [i]&#34;即使在那个特定的时刻,模具具有相同的价值?
答案 0 :(得分:2)
它会导致无限循环,因为您正在检查 acookies 的第一个字符是否为空格,如果是,则删除 cookie 的第一个字符(不是 acookies )。因此,如果 acookies 确实有空格作为第一个字符,则while语句将始终为true,因为您没有从 acookies
中删除该空格function getCookie(kname) {
var fullkeyname = kname + "=";
var fullcookie = document.cookie;
var acookies = fullcookie.split(";");
for (var i = 0; i < acookies.length; i++) {
while (acookies[i].charAt(0) == " ") { //THE ISSUE IS HERE
acookies[i] = acookies[i].substring(1); // FIXED THIS LINE
}
var cookie = acookies[i];
if(cookie.indexOf(fullkeyname) == 0) {
return cookie.substring(fullkeyname.length, cookie.length);
}
}
return "";
}
编辑错字,谢谢FREE_AND_OPEN_SOURCE
答案 1 :(得分:0)
我在while循环中看到了一个问题
while (acookies[i].charAt(0) == " ") { //THE ISSUE IS HERE
cookie = cookie.substring(1);
}
曾经有过eookies [i] .charAt(0)==&#34; &#34;变为现实,它将继续循环,并且永远不会在循环中外出以增加&#39; i&#39;。
的值。并且在代码的第二个版本中,您正在修改cookie变量本身,这会使while条件为false,从而将控件移出循环并继续执行。