这个数字为什么是一个字符串?

这个数字为什么是一个字符串?

问题描述:

使用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); 

http://jsfiddle.net/CqBw6/

+1

这是正确的。 '1'是一个字符串。 1是一个数字。 – quest 2011-05-23 02:35:44

+0

正如我在下面的其他答案中所说的那样,总是在'parseInt'中使用radix参数,这会让Javascript猜测出您想要解析的数字的基础是一种糟糕的做法。 – HoLyVieR 2011-05-23 02:54:56

+0

幸运的是,这是一个普遍的事实。像ruby/js/python等语言将有相同的问题。您可以随时使用萤火虫console.log输出并查看对象的类型。 – 2011-05-23 04:00:22

我想你应该改变$.cookie('xyz_id','1');$.cookie('xyz_id',1);,如果它仍然是一个字符串,可以使用eval()函数,使之成为数字。

[X]

+2

使用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 
} 
+1

请始终在'parseInt'上使用radix参数。这不是一个不好的做法。 'parseInt(“1”,10)'是这样做的正确方法。 – HoLyVieR 2011-05-23 02:48:15

+0

是的10可以防止它意外地将字符串视为十六进制或八进制,但它不会阻止它删除字符串中带有数字和字符的字符。所以我不会说离开10是一个不好的做法,它不包括使用parseInt时可能出错的所有事情。使用此功能有许多问题 – Drew 2011-05-23 02:59:03

+0

包括radix参数并不能解决所有问题,因此不应该提出异议,您应该使用它。 – 2011-05-23 17:07:17

使用parseInt(str,10)创建为其他建议。

你也应该建立你的选择时,使用字符串连接:

var $el = $('#main li:eq('+$curr+')'); 

它也是一致性和代码的可读性只使用jQuery的对象,而不是字符串或数字$something变量名很好的做法。

+0

甚至更​​好,永远不要使用$名称。特别是如果你的后端是在PHP中(我了解到一次硬的方式... 5000行的经典JavaScript,随后再加上PHP,然后再加上jQuery ... urk)。 – 2011-05-23 03:14:03

+0

哦,+1确保使用parseInt的基数。 – 2011-05-23 03:16:09

感谢您的答案。我最初的困难是由于我没有将parseInt()放在$ curr变量中。咄。

这很奇怪 - 我不知道为什么从第二个参数中删除引号仍然返回一个字符串。

$.cookie('xyz_id', 2); 

$.cookie('xyz_id', '2'); 

返回字符串。

+0

他们不返回字符串。它们确实导致字符串被最终调用到'$ .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的名称/值对都是 “字符串”。

+0

感谢您的伟大的cookie解释 – Adam 2011-05-23 17:03:08

+0

@亚当:没问题。 – 2011-05-23 17:04:49