Javascript中意外的无限循环
我正在用javascript进行cookie实践,并开发了以下代码:Javascript中意外的无限循环,javascript,loops,cookies,Javascript,Loops,Cookies,我正在用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];
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 "";
}
函数getCookie(kname){
var fullkeyname=kname+“=”;
var fullcookie=document.cookie;
var acookies=fullcookie.split(“;”);
对于(变量i=0;i
它不起作用,似乎是上升和无限循环,所以我在各个部分使用“document.write”跟踪我的代码,发现如果我更改“while”条件,它将按如下方式工作:
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 "";
}
函数getCookie(kname){
var fullkeyname=kname+“=”;
var fullcookie=document.cookie;
var acookies=fullcookie.split(“;”);
对于(变量i=0;i
现在,我的代码按预期工作,但是我不知道为什么,因为我已经将cookies的值设置为“cookie=acookies[I]”,我不明白如果我不使用“cookie”变量,为什么它会无限循环。
问题是:为什么代码使用我的“cookie”变量,而不使用“acookies[i]”变量,即使该变量在给定时刻具有相同的值?它会导致无限循环,因为您正在检查acookies的第一个字符是否为空,如果为空,您正在删除cookie的第一个字符(而不是acookies)。因此,如果acookies确实有一个空格作为第一个字符,while语句将始终为true,因为您没有从acookies中删除该空格
函数getCookie(kname){
var fullkeyname=kname+“=”;
var fullcookie=document.cookie;
var acookies=fullcookie.split(“;”);
对于(变量i=0;i
编辑为打字错误,谢谢免费和开源。它会导致一个无限循环,因为您正在检查acookies的第一个字符是否为空,如果为空,则删除cookie的第一个字符(不是acookies)。因此,如果acookies确实有一个空格作为第一个字符,while语句将始终为true,因为您没有从acookies中删除该空格
函数getCookie(kname){
var fullkeyname=kname+“=”;
var fullcookie=document.cookie;
var acookies=fullcookie.split(“;”);
对于(变量i=0;i
编辑为打字错误,谢谢免费和开源我在while循环中发现了一个问题
while (acookies[i].charAt(0) == " ") { //THE ISSUE IS HERE
cookie = cookie.substring(1);
}
一旦acookies[i].charAt(0)==“变为真,它将继续循环,并且在循环增加“i”的值时将永远无法跳出
在代码的第二个版本中,您修改了cookie变量本身,使while条件为false,从而将控件移出循环并继续执行。我发现while循环中存在问题
while (acookies[i].charAt(0) == " ") { //THE ISSUE IS HERE
cookie = cookie.substring(1);
}
一旦acookies[i].charAt(0)==“变为真,它将继续循环,并且在循环增加“i”的值时将永远无法跳出
在代码的第二个版本中,您正在修改cookie变量本身,这使得while条件为false,从而将控件移出循环并继续执行。
ifcookie.indexOf(fullkeyname)==0)
-我看到缺少(
在第一个代码块中。这是一个输入错误吗?因为您没有在while
循环体中修改acookies[i]
。当您将acookies[i]
赋值给变量cookie
时,您只需设置一个指针;因此赋值cookie=cookie.substring(1)
不会更改acookies
,它只会更新指针您只需设置一个指针
-不,这不对,因为cookie[i]是一个字符串,cookie=cookies[i]
复制值-没有“指针”,或者更准确地说,引用只需使用var cookie=acookies[i].trim()
忘了while loopJaromanda,我想我会哈哈,但我想知道为什么它会给出一个错误ifcookie.indexOf(fullkeyname)==0
-我在第一块代码中看到一个缺少的(
。是打字错误吗?因为你没有修改acookies[I]在while
循环的主体中。将acookies[i]
赋值给变量cookie
时,只需设置一个指针;因此赋值cookie=cookie.substring(1)
不会更改acookies
,它只会更新指针您只需设置一个指针
-不,这不对,因为cookie[i]是一个字符串,cookie=cookies[i]
复制值-没有“指针”,或者更准确地说,引用只需使用var cookie=acookies[i].trim()
忘了while loopJaromanda,我想我会的哈哈,但我想知道它为什么会出错你的意思是acookies[I]=acookies[I]。子字符串(1);
你