如何将两个字符串值比较为整数?

时间:2012-09-26 09:18:13

标签: javascript

我正在使用

转换和比较两个字符串值
if (parseInt(x)!=parseInt(y)) {

问题是如果值为x="9"y="09",则测试返回false

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:15)

使用此:

if(parseInt(x, 10)!=parseInt(y, 10))

如果你没有精确的基数,“09”被解析为八进制(这给出0)。

MDN documentation about parseInt

请注意,在处理八进制表示时,您甚至不应该依赖此解释:

  

ECMAScript 5删除八进制解释

     

不再使用函数parseInt的ECMAScript 5规范   允许实现处理以0字符开头的字符串   作为八进制值。 ECMAScript 5指出:

     

parseInt函数产生一个由其指定的整数值   根据的解释字符串参数的内容   指定的基数。字符串中的前导空格被忽略。如果基数是   undefined或0,除数字开始外,假设为10   字符对为0x或0X,在这种情况下,16的基数为   假定。如果基数为16,则数字也可以选择以   字符对0x或0X。

     

这与ECMAScript 3不同,后者不鼓励但允许八进制   解释

     

由于许多实现在2011年都未采用此行为,   并且由于必须支持旧浏览器,因此请始终指定基数。

简单地说:

  

始终指定基数

答案 1 :(得分:3)

你需要将基数显式设置为10,否则假设它是8(javascript坏部分):

parseInt(x,10)

http://www.w3schools.com/jsref/jsref_parseint.asp

  

如果字符串以“0”开头,则基数为8(八进制)。这个功能是   弃用