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

如何获取指定Cookie并构建键值对数组?代码报错求修复

修复Cookie获取代码中的"cname is not defined"错误

核心错误原因

遍历cookiesNames数组时,你调用getCookie(cname),但cname是未定义的变量,正确的做法是传入数组中当前遍历到的Cookie名称,即cookiesNames[key]。

其他代码问题及修复

除了上述错误,代码还有两处逻辑问题:

  • cookiesList[cname] = c.value:c是分割后的Cookie字符串,没有value属性,应该直接使用截取后的Cookie值。
  • cvalue被定义为数组,但实际只需要存储单个字符串值,没必要用数组类型。
  • 遍历数组推荐用forEach,比for...in更适合数组遍历场景,避免意外遍历到原型链上的属性。

修复后的完整代码

var cookiesNames = ["cookie1", "cookie2", "cookie3"];
var cookiesList = {};

function getCookie(cname) {
  let name = cname + "=";
  let decodedCookie = decodeURIComponent(document.cookie);
  let ca = decodedCookie.split(';');
  let cvalue = ""; // 改为字符串类型

  for(let i = 0; i < ca.length; i++) {
    let c = ca[i];
    while (c.charAt(0) === ' ') {
      c = c.substring(1);
    }
    if (c.indexOf(name) === 0) {
      cvalue = c.substring(name.length, c.length);
      cookiesList[cname] = cvalue; // 赋值截取到的Cookie值
      break; // 找到目标Cookie后直接跳出循环,提升效率
    }
  }
}

// 遍历数组并传入每个Cookie名称
cookiesNames.forEach(function(cookieName) {
  getCookie(cookieName);
});

额外优化说明

  • 添加break语句:找到目标Cookie后立即终止循环,不需要继续遍历剩余的Cookie项,提升执行效率。
  • 使用===严格相等运算符:替换原代码中的==,避免隐式类型转换导致的潜在问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 13:01:01