【问题标题】:JavaScript Cookies i'm getting NaN propertyJavaScript Cookies 我得到了 NaN 属性
【发布时间】:2021-12-16 00:21:24
【问题描述】:

我试图在 document.cookie 的 javascript 中保存一个数字。 但是当我尝试获取带有数字的 cookie 时,当我尝试显示它时总是得到 NaN

var playerCoffeeCount = 0;
function setCookie(c_name, value, exdays) { //Setting a cookie (just a shortcut for making cookies)
    var exdate = new Date();
    exdate.setDate(exdate.getDate() + exdays);
    var c_value = escape(value) + ((exdays == null) ? "" : "; expires=" + exdate.toUTCString());
    document.cookie = c_name + "=" + c_value;
}

function getCookie(c_name) { //Getting a cookie (another shortcut)
    var i, x, y, ARRcookies = document.cookie.split(";");
    for (i = 0; i < ARRcookies.length; i++) {
        x = ARRcookies[i].substr(0, ARRcookies[i].indexOf("="));
        y = ARRcookies[i].substr(ARRcookies[i].indexOf("=") + 1);
        x = x.replace(/^\s+|\s+$/g, "");
        if (x == c_name) {
            return unescape(y);
        }
    }
}

function saveGame(){
    setCookie("playerCoffeeCookie", playerCoffeeCount, 999);
}
function loadGame(){
    playerCoffeeCount = getCookie("playerCoffeeCookie");
}
function displayCookie(){
    document.getElementById("coffeecount").innerHTML= "Coffee: " + Math.floor(playerCoffeeCount);
}

JavaScript 中的这个 cookie 系统保存了该值,但它显示为 NaN...请帮助 :(

【问题讨论】:

  • 那是因为该值是一个字符串,而不是一个数字。
  • 请显示调用它的代码和显示cookie的代码。
  • @Diodeus 包含数字的字符串在用于算术表达式时通常会自动转换。
  • 这里对我来说很好用:jsfiddle.net/Ja5pw
  • 增加变量和显示功能

标签: javascript cookies


【解决方案1】:

试试这个,效果很好。

 function createCookie(name,days,value) {
        if (days) {
            var date = new Date();
            date.setTime(date.getTime()+(days*24*60*60*1000));
            var expires = "; expires="+date.toGMTString();
        }
        else var expires = "";
        document.cookie = name+"="+value+expires+"; path=/";
    }

    function readCookie(name) { //cookie reader function
        var nameEQ = name + "=";
        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,c.length);
            if (c.indexOf(nameEQ) == 0) return       c.substring(nameEQ.length,c.length);
        }
        return null;
    }

    function eraseCookie(name) { //cookie eraser function
        createCookie(name,"",-1);
    }

    createCookie("test", 1, 1);
    var mycookie= readCookie("test");
    mycookie = parseFloat(mycookie);
    console.log(mycookie);

【讨论】:

  • 这里需要设置一个数字-> setCookie("playerCoffeeCookie", 365, 999);
【解决方案2】:

我刚刚发现你只需要禁用自动保存然后硬重置然后立即退出选项卡,如果它不起作用继续尝试直到它起作用

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 2014-04-27
  • 1970-01-01
  • 2019-12-08
  • 2021-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-10
  • 2015-07-05
相关资源
最近更新 更多