6

我正在使用转换和比较两个字符串值

if (parseInt(x)!=parseInt(y)) {

问题是如果值是x="9"并且y="09"测试返回false

我怎样才能解决这个问题?

4

2 回答 2

16

用这个 :

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

如果您不精确基数,“09”将被解析为八进制(这给出 0)。

关于 parseInt 的 MDN 文档

请注意,在使用八进制表示时,您甚至不应该依赖这种解释:

ECMAScript 5 移除八进制解释

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

parseInt 函数根据指定的基数生成一个整数值,该整数值由对字符串参数的内容的解释决定。字符串中的前导空格被忽略。如果基数未定义或为 0,则假定为 10,除非数字以字符对 0x 或 0X 开头,在这种情况下假定基数为 16。如果 radix 为 16,则 number 也可以选择以字符对 0x 或 0X 开头。

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

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

简单地 :

总是指定一个基数

于 2012-09-26T09:19:23.243 回答
3

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

parseInt(x,10)

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

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

于 2012-09-26T09:22:52.383 回答