Js可以读取cookie但无法评估它们

时间:2014-08-21 07:49:03

标签: javascript html cookies colors background

我已经制作了一个网页,询问用户是否要启用效果,如果他们说是,那么我将“YES”存储为Cookie effect=true,或者如果他们不想要它,那么我也是将其存储为effect=false cookie。该问题列为以下步骤:

  1. 用户访问网页(第一次)
  2. 他收到document.cookie的提醒,即“”。
  3. 他点击确定
  4. 现在saveedd的值为“”,因此根据我的代码,// Checkpoint 2下面的代码应该执行,因为已保存的值既不是true也不是false
  5. 但是它只执行// Checkpoint 1下面的一行代码,这不应该发生,因为saveed的值不是false
  6. 我做错了什么?

    注意:我已删除了一些代码,因此,如果您发现var未定义的任何错误,请发表评论

    的index.html

    <html>
        <head>
            <title>My Second Page</title>
        </head>
        <body onload="askk()">
        </body>
    
        </html>
    

    的script.js

    function askk() {
        var saveedd = getCookie('effect');
        alert(saveedd);
        if (saveedd == true) {
            changge();
            alert('i wil change');
        } else if (saveedd == false) {
             // Checkpoint 1
            alert('i will not change'); 
        } else {
              // Checkpoint 2
            document.cookie = "effect=;expires=Wed; 01 Jan 1970";
            var z = confirm("Enable Bgcolor Effect?");
            if (z) {
                changge();
            }
            setCookie("effect", z, 30);
        }
    
    }
    
    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) != -1) {
                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);
            }
        }
    }
    
    function changge() {
        window.setInterval("Farbe()", 500);
    }
    farbe = 1;
    
    function Farbe() {
        if (farbe == 1) {
            document.bgColor = "indigo";
            farbe = 2;
        } else if (farbe == 2) {
            document.bgColor = "red";
            farbe = 3;
        } else if (farbe == 3) {
            document.bgColor = "green";
            farbe = 4;
        } else if (farbe == 4) {
            document.bgColor = "blue";
            farbe = 1;
        }
    }
    

2 个答案:

答案 0 :(得分:1)

比较if (saveedd == false)字符串saveedd转换为bool类型,JS中的空字符串转换为false。您应该将字符串与字符串进行比较,如下所示:(saveedd == 'false')

答案 1 :(得分:1)

您正在与==运算符进行比较,该运算符在比较之前将变量强制为相同的类型。因此,saveedd值,即空字符串''将被转换为false。这就是检查点1正在执行的原因。

您需要使用三等于===进行比较。这将保留您要比较的变量的类型,因此saveedd == false仅在saveedd为false,而不是0,'',[]或其他“falsy”值时才为true。有关详细信息,请参阅Which equals operator (== vs ===) should be used in JavaScript comparisons?

编辑:

正如weeklyTea提到的,你也在比较布尔值true和false。您可能需要与字符串“true”和“false”进行比较。