Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript中意外的无限循环_Javascript_Loops_Cookies - Fatal编程技术网

Javascript中意外的无限循环

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];

我正在用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 "";
}
函数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);