while和for循环的目的是什么,if代码中的语句

What is the purpose of while and for loops, if statement in this code?

本文关键字:if 代码 语句 for 循环 while 是什么      更新时间:2023-09-26

我试图理解JavaScript中Cookie的概念。为此,我试图从 http://www.w3schools.com/js/tryit.asp?filename=tryjs_cookie_username 理解这段代码的工作原理:

<script>
function setCookie(cname,cvalue,exdays) {
    var d = new Date();
    d.setTime(d.getTime() + (exdays*24*60*60*1000));
    var expires = "expires=" + d.toGMTString();
    document.cookie = cname+"="+cvalue+"; "+expires;
}
function getCookie(cname) {
    var name = cname + "=";
    var ca = document.cookie.split(';');
    for(var i=0; i<ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1);
        if (c.indexOf(name) == 0) {
            return c.substring(name.length, c.length);
        }
    }
    return "";
}
function checkCookie() {
    var user=getCookie("username");
    if (user != "") {
        alert("Welcome again " + user);
    } else {
       user = prompt("Please enter your name:","");
       if (user != "" && user != null) {
           setCookie("username", user, 30);
       }
    }
}
</script>

我已经理解了这段代码中的大部分内容,但我仍然有一些疑问/查询(在getCookie函数中):

疑问 1.for 循环的目的

疑点 2.如果的目的

疑点 3.while 循环的目的

疑问 4.返回目的 ";

我问这些是因为即使不使用这些条件,脚本也能正常运行。(我知道getCookie函数中每个内置函数的工作。我只是不明白上述循环和条件的使用)。

以下是我想说的:

    function getCookie(cname) {
    var name = cname + "=";
    var ca = document.cookie.split(';');
    var c = ca[0];
    return c.substring(name.length, c.length);
}

即使我在函数(exdays*2000)中将到期日期更改为过去的日期setCookie ),它仍然显示"欢迎使用 XYZ"消息。这意味着 Cookie 不会被删除。但是当我在不同的浏览器中运行相同的代码时,它被删除了。为什么会这样?

疑问 1.for 循环的目的

所有 cookie 都保存为分号分隔的键值(实际上是分号和空格;.key值由等号 (=) 分隔。通过迭代,您将检查所有键并仅返回与传递给方法的参数匹配的键值

疑点 2.如果的目的

检查迭代中的当前键是否包含传递给方法的 cookie 名称。

疑点 3.while 循环的目的

逐个删除所有空格。实际上,使用trim()方法可以轻松改进这一点。

//while (c.charAt(0)==' ') c = c.substring(1);
c = c.trim();

疑问 4.返回目的 ";

如果未找到值,则返回一个空字符串,而不是用户必须检查nullundefined

即使我在 setCookie 中将到期日期更改为过去的日期 函数(exdays*2000),它仍然显示"欢迎来到XYZ" 消息。这意味着 Cookie 不会被删除。但是当我运行相同的内容时 代码,它将被删除。为什么会这样?

当您在同一浏览器上第二次打开该页面时,您的 setCookie 方法可能没有执行(假设这一点,因为您没有共享任何小提琴)。

疑问 1.for 循环的目的

Cookie 存储为单行字符串,如下所示:

"Cookie_1=Cookie_value1;   Cookie_2=Cookie_value2; Cookie_3=Cookie_value3; Cookie_4=Cookie_value4;"

然后将其拆分为数组

var ca = document.cookie.split(';');

所以 ca 的值现在是 ["Cookie_1=Cookie_value1"、"Cookie_2=Cookie_value2"、"Cookie_3=Cookie_value3"、"Cookie_4=Cookie_value4","]可以将其视为数组每个成员的cookie"实体"

疑点 3.while 循环的目的

如果您查看 ca 数组中的值,您会发现 Cookie 2 的值为 " Cookie_2=Cookie_value2" 。我们需要修剪掉一些前导空格,因此这就是这个while循环的目的

while (c.charAt(0)==' ') c = c.substring(1);

疑点 2.如果的目的

修剪前导空格后,您可以检查 cookie 名称是否与您正在寻找的名称匹配。例如,"Cookie_3=Cookie_value3".indexOf("Cookie_3=")等于 0

疑问 4.返回目的 ";

这只是在找不到指定的 cookie 名称时返回的默认值,类似于开关大小写中的默认值。