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

时间:2011-05-23 02:32:16

标签: javascript jquery cookies typeof

使用jQuery Cookies插件,我正在设置一个cookie,其值是一个数字。

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

我需要使用这个数字来获取HTML中元素的索引。

var $curr = $.cookie('xyz_id'); 
var $el = $('#main li:eq($curr)');

$ curr的输出是1.那么为什么typeOf()$ curr显示为字符串而不是数字?我尝试使用parseInt()将其转换为数字失败了。不知道发生了什么......

6 个答案:

答案 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);

http://jsfiddle.net/CqBw6/

答案 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]