使用jQuery Cookies插件,我正在设置一个cookie,其值是一个数字。
$.cookie('xyz_id','1');
我需要使用这个数字来获取HTML中元素的索引。
var $curr = $.cookie('xyz_id');
var $el = $('#main li:eq($curr)');
$ curr的输出是1.那么为什么typeOf()$ curr显示为字符串而不是数字?我尝试使用parseInt()将其转换为数字失败了。不知道发生了什么......
答案 0 :(得分:10)
引号使变量成为字符串:
'1'
但是,在这种情况下,cookie实际上是字符串:
要读出你必须要处理的cookie document.cookie作为字符串和搜索 对于某些字符(分号, 例如)和cookie名称。
http://www.quirksmode.org/js/cookies.html
相反,请执行:
$.cookie('xyz_id', 1); // or, really, '1' would be the same
然后,在回读值时,使用parseInt()
将其强制转换为数值。
var xyz_id = parseInt($.cookie('xyz_id'));
应该创建一个数值。
此外,parseInt
应该(在合理范围内)对字符串中的数字进行类型转换。参见:
var i = "1";
alert(typeof i);
i = parseInt(i);
alert(typeof i);
答案 1 :(得分:2)
使用其他人建议的parseInt(str,10)
。
在构建选择器时,您还应该使用字符串连接:
var $el = $('#main li:eq('+$curr+')');
对于一致性和代码可读性而言,仅对jQuery对象使用$something
变量名称而不是字符串或数字也是一种好习惯。
答案 2 :(得分:1)
这实际上与您将数字字符串传递给jQuery cookie插件的事实几乎没有关系,因为即使您传递了文字1
,它也不会很长时间没有保持非弦!
Cookie值在内部存储,基本上是字符串。该值进入HTTP标头并进入最终用户的浏览器,因此远离Javascript类型系统。
幸运的是,由于Javascript是动态类型的,因此无关紧要。如果表示中的值为数字,则可以将其强制转换为数字类型:
var value = $.cookie('name');
alert(parseInt(value, 10)); // note: specify the radix!
尽管如此,我还是不会打扰,因为你要将它直接连接成一个字符串:
var $el = $('#main li:eq(' + value + ')');
或者,为了在现代浏览器中利用效率,您可以:
var $el = $('#main li').eq(parseInt(value, 10)); // I recommend this version
the plugin's source中有一条线索:
document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
和
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
Cookie名称/值对都是“字符串”。
答案 3 :(得分:0)
上面的答案确实解决了将字符串保存到cookie而不是整数的问题。您也可以将字符串强制转换为整数,反之亦然。
parseInt('1'); //1
您可以检查是否真的使用isNaN()
var n = parseInt('1');
if( !isNaN( n ) ){
//Horray we have an integer
}
答案 4 :(得分:0)
感谢您的回答。我最初的困难是因为我没有正确地将parseInt()放在$ curr变量中。咄。
虽然很奇怪 - 我想知道为什么从第二个参数中删除引号仍会返回一个字符串。
$.cookie('xyz_id', 2);
或
$.cookie('xyz_id', '2');
都返回字符串。
答案 5 :(得分:-3)
我认为您应该将$.cookie('xyz_id','1');
更改为$.cookie('xyz_id',1);
,如果它仍然是字符串,则可以使用eval()将其设为数字。
[X]