You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用js-cookie设置首页访问Cookie异常,控制台始终输出‘da’求修正

问题分析与修正方案

让我帮你拆解这段代码的问题,以及给出对应的修复方案:

核心问题所在

你的代码逻辑存在两个关键问题,导致控制台始终输出da:

  1. Cookie不存在时的判断错误:当sw_home_visit这个Cookie还未设置时,Cookies.get('sw_home_visit')会返回undefined。而undefined < 1的比较结果是false(因为undefined会被转换为NaN,NaN和任何数值比较都会返回false),所以直接进入了else分支。
  2. 字符串与数字的比较错误:即使Cookie存在,你存储的是字符串类型的'1',当执行'1' < 1时,字符串会被转换为数字1,1 < 1的结果依然是false,还是会走到else分支。

修正方案

根据你的需求,分两种场景给出修复代码:

场景1:仅标记用户是否首次访问首页

如果你的需求只是判断用户是否第一次访问,不需要统计次数,代码可以这样改:

<script src="https://cdn.jsdelivr.net/npm/js-cookie@2/src/js.cookie.min.js"></script>
<script>
var index_da = Cookies.get('sw_home_visit');
// 直接判断Cookie是否未存在
if (!index_da) {
    Cookies.set('sw_home_visit', '1', { expires: 365 });
    console.log("nicht da");
} else {
    console.log("da");
}
</script>

场景2:统计用户访问首页的次数

如果需要统计用户的访问次数,每次访问都递增计数,可以这样写:

<script src="https://cdn.jsdelivr.net/npm/js-cookie@2/src/js.cookie.min.js"></script>
<script>
var visitCount = Cookies.get('sw_home_visit');
// 将Cookie值转为数字,不存在则默认设为0
visitCount = visitCount ? parseInt(visitCount, 10) : 0;

if (visitCount === 0) {
    // 首次访问,设置计数为1
    Cookies.set('sw_home_visit', '1', { expires: 365 });
    console.log("nicht da");
} else {
    // 非首次访问,计数+1后重新存储
    Cookies.set('sw_home_visit', (visitCount + 1).toString(), { expires: 365 });
    console.log("da");
}
</script>

关键修正点说明

  • 对于仅标记的场景,!index_da可以直接判断Cookie是否未被设置,确保首次访问时进入正确分支。
  • 对于统计次数的场景,必须把Cookie的字符串值转换为数字进行计算,更新后再转回字符串存储(因为Cookie的所有值都是字符串类型)。

内容的提问来源于stack exchange,提问作者Daiaiai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:56:49