这个数字为什么是一个字符串?
使用jQuery Cookies插件,我设置了一个cookie,其值是一个数字。这个数字为什么是一个字符串?
$.cookie('xyz_id','1');
我需要使用这个数字来获取HTML中元素的索引。
var $curr = $.cookie('xyz_id');
var $el = $('#main li:eq($curr)');
$ curr的输出是1.那么为什么typeOf()$ curr显示为字符串而不是数字?我尝试使用parseInt()将其转换为数字失败。不知道这是怎么回事....
行情做一个变量的字符串:
'1'
然而,在这种情况下,cookie是有效的字符串:
要读出你的cookie必须将 document.cookie视为字符串,并搜索 以获取某些字符(例如分号, )和cookie名称。
http://www.quirksmode.org/js/cookies.html
相反,这样做:
然后,读值回来的时候,将它转换回用parseInt()
数值。
var xyz_id = parseInt($.cookie('xyz_id'));
应该创建一个数值。
此外,parseInt
应该工作(在合理的范围内)从字符串中类型化一个数字。请参阅:
var i = "1";
alert(typeof i);
i = parseInt(i);
alert(typeof i);
我想你应该改变$.cookie('xyz_id','1');
到$.cookie('xyz_id',1);
,如果它仍然是一个字符串,可以使用eval()函数,使之成为数字。
[X]
使用parseInt()将一个像这样格式化的字符串变成一个数字。仅使用eval()作为最后的手段。 – 2011-05-23 02:38:52
的答案以上在这里做保存字符串一个cookie,而不是一个整数的解决这一问题。您也可以将字符串强制为整数,反之亦然。
parseInt('1'); //1
您可以检查是否一个整数是真的isNaN()
var n = parseInt('1');
if(!isNaN(n)){
//Horray we have an integer
}
使用parseInt(str,10)
创建为其他建议。
你也应该建立你的选择时,使用字符串连接:
var $el = $('#main li:eq('+$curr+')');
它也是一致性和代码的可读性只使用jQuery的对象,而不是字符串或数字$something
变量名很好的做法。
甚至更好,永远不要使用$名称。特别是如果你的后端是在PHP中(我了解到一次硬的方式... 5000行的经典JavaScript,随后再加上PHP,然后再加上jQuery ... urk)。 – 2011-05-23 03:14:03
哦,+1确保使用parseInt的基数。 – 2011-05-23 03:16:09
感谢您的答案。我最初的困难是由于我没有将parseInt()放在$ curr变量中。咄。
这很奇怪 - 我不知道为什么从第二个参数中删除引号仍然返回一个字符串。
$.cookie('xyz_id', 2);
或
$.cookie('xyz_id', '2');
返回字符串。
他们不返回字符串。它们确实导致字符串被最终调用到'$ .cookie('xyz_id')'返回。 :) – 2011-05-23 17:05:58
这其实已经很少做,你通过一个数字串对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
有一个CLU E在the plugin's source:
document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
和
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
Cookie的名称/值对都是 “字符串”。
感谢您的伟大的cookie解释 – Adam 2011-05-23 17:03:08
@亚当:没问题。 – 2011-05-23 17:04:49
这是正确的。 '1'是一个字符串。 1是一个数字。 – quest 2011-05-23 02:35:44
正如我在下面的其他答案中所说的那样,总是在'parseInt'中使用radix参数,这会让Javascript猜测出您想要解析的数字的基础是一种糟糕的做法。 – HoLyVieR 2011-05-23 02:54:56
幸运的是,这是一个普遍的事实。像ruby/js/python等语言将有相同的问题。您可以随时使用萤火虫console.log输出并查看对象的类型。 – 2011-05-23 04:00:22