所以,我有一个问题,对我来说,我似乎无法解决它。这看起来很基本,但我无法理解为什么这段代码不起作用。
我的问题是,我正在为一个数组分配一个键值对,但是没有赋值。这是一个可变范围问题吗?
这是我的代码
function getcookie(cookiename){
var mycookies = []; // The cookie jar
var temp = document.cookie.split(";");
var key = "";
var val = "";
for(i=0;i<temp.length;i++){
key = temp[i].split("=")[0];
val = temp[i].split("=")[1];
mycookies[key] = val;
}
return mycookies[cookiename];
}
修剪你的密钥,因为cookie字符串看起来像这样:
“__utma = 250730393.1032915092.1427933260.1430325220.1430325220.1; __ utmc = 250730393; __ utmz = 250730393.1430325220.1.1.utmcsr =(direct)| utmccn =(direct)| utmcmd =(none); clicks = 22; _gat = 1; _ga = GA1.2.1032915092 0.1427933260"
因此,当您在;
上拆分时,在某些关键名称之前会有一个额外的空格。
function getcookie(cookiename){
var mycookies = []; // The cookie jar
var temp = document.cookie.split(";");
var key = "";
var val = "";
for(i=0;i<temp.length;i++){
key = temp[i].split("=")[0].trim(); // added trim here
val = temp[i].split("=")[1];
mycookies[key] = val;
}
return mycookies[cookiename];
}
但是:Kua zxsw指出
假设JSBin大于0,则应填充mycookies
。您的返回值始终为temp.length
; undefined
从未被赋予价值。
尝试在return语句之前添加mycookies[cookiename]
。
console.log(mycookies)
应该是Mycookies
,而不是Object
。
Array
JavaScript数组不是关联数组,只有可能的索引值是数字的,从0开始到var mycookies = {};
结束。您之前在其他语言中使用过的示例或在其他语言中使用的是JavaScript对象,事实上,它实际上表现为关联数组。您可以通过array.length - 1
或object['key']
访问对象值。第一个仅在使用变量或包含非法字符的密钥(即object.key
)访问密钥时使用,否则建议使用点访问,如第二个示例所示。
因此,你的some-key
变量应该是一个对象,而不是一个数组。
如果将行mycookies
更改为var mycookies = [];
,即将其从空数组更改为空对象,则其余代码应按预期工作。
这是一个固定代码的示例代码段,我添加了一个模拟cookie字符串,以便它可以可靠地工作:
var mycookies = {};
var mockCookies = "a=1;b=2;c=3";
function getcookie(cookiename){
var mycookies = {}; // The cookie jar
var temp = mockCookies.split(";");
var key = "";
var val = "";
for(i=0;i<temp.length;i++){
key = temp[i].split("=")[0];
val = temp[i].split("=")[1];
mycookies[key] = val;
}
return mycookies[cookiename];
}
function printCookie(name) {
alert(getcookie(name));
}
我的朋友,你有点困惑(也许你用PHP编程),因为在JavaScript中,<button onclick="printCookie('a')">Get a</button>
<button onclick="printCookie('b')">Get b</button>
<button onclick="printCookie('c')">Get c</button>
不是关联键:值对象,它是一个基于索引的对象。但你要找的是一个Object Literal
Array
但是你可以重构你的代码:
function getcookie (cookiename){
var i, max, keyvalue, key, val,
cookiesObj = {}, //empty object literal
cookiesArr = document.cookie.split(";");
for(i=0, max=cookiesArr.length; i<max; i+=1) {
keyvalue = cookiesArr[i].split("=");
key = keyvalue[0].trim();
val = keyvalue[1].trim();
cookiesObj[key] = val;
}
return cookiesObj[cookiename];
}