我是做在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 "";
}
它沒有工作,似乎在上升,無限循環,所以我找到我的代碼以「文件撰寫」在各種零件和發現,如果我改變「而」條件,將工作如下:
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值設置爲「 cookie = acookies [我]「我不明白爲什麼它應該循環不謹慎,如果我不使用「cookie」變量。 問題是:爲什麼代碼與我的「cookie」變量一起工作,而不是與「acookies [i]」一起工作,儘管在給定的時刻應該具有相同的值?
'ifcookie.indexOf(fullkeyname)== 0)' - 我看到一個缺失的'('在第一個代碼塊。是否是錯字? – curveball
因爲你沒有修改體內的'acookies [i]'當你將'acookies [i]'賦值給變量'cookie'時,你只需設置一個指針;所以賦值'cookie = cookie.substring(1);'不會改變'acookies' ,它只是更新指針 – Hamms
'你只是設置一個指針' - 不,這是不正確的,因爲cookie [i]是一個字符串,'cookie = cookies [i]'**複製**值 - 沒有「指針」,或更準確,引用 –