如何获取指定Cookie并构建键值对数组?代码报错求修复
核心错误原因
遍历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
相关产品推荐
相关产品推荐

