使用js-cookie设置首页访问Cookie异常,控制台始终输出‘da’求修正
问题分析与修正方案
让我帮你拆解这段代码的问题,以及给出对应的修复方案:
核心问题所在
你的代码逻辑存在两个关键问题,导致控制台始终输出da:
- Cookie不存在时的判断错误:当
sw_home_visit这个Cookie还未设置时,Cookies.get('sw_home_visit')会返回undefined。而undefined < 1的比较结果是false(因为undefined会被转换为NaN,NaN和任何数值比较都会返回false),所以直接进入了else分支。 - 字符串与数字的比较错误:即使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
相关产品推荐
相关产品推荐

