Javascript 如何将两个字符串值作为整数进行比较?

Javascript 如何将两个字符串值作为整数进行比较?,javascript,Javascript,我正在使用转换和比较两个字符串值 if (parseInt(x)!=parseInt(y)) { 问题是如果值是x=“9”和y=“09”则测试返回false 如何修复此问题?使用此选项: if(parseInt(x, 10)!=parseInt(y, 10)) 如果不精确基数,“09”将被解析为八进制(即0) 请注意,在使用八进制表示法时,您甚至不应该依赖此解释: ECMAScript 5删除八进制解释 函数parseInt的ECMAScript 5规范不再适用 允许实现处理以0字符开头的

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

if (parseInt(x)!=parseInt(y)) {
问题是如果值是
x=“9”
y=“09”
则测试返回
false

如何修复此问题?

使用此选项:

if(parseInt(x, 10)!=parseInt(y, 10))
如果不精确基数,“09”将被解析为八进制(即0)

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

ECMAScript 5删除八进制解释

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

parseInt函数生成一个由 根据 指定的基数。忽略字符串中的前导空格。如果基数为 未定义或0,假定为10,数字开始时除外 使用字符对0x或0x,在这种情况下,基数为16 假定的。若基数为16,则数字也可以选择以开头 字符对0x或0x

这与ECMAScript 3不同,ECMAScript 3不鼓励八进制,但允许八进制 口译

由于许多实现到2011年还没有采用这种行为, 由于必须支持较旧的浏览器,所以始终指定基数

简单地说:

始终指定基数


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

如果字符串以“0”开头,则基数为8(八进制)。此功能是 不赞成


顺便说一句:
9
09
被认为是相等的,因为
09
不是有效的八进制数字,因此被解释为十进制。真的吗?FF将其解析为零。@spender我也在使用Firefox;在web控制台、scratchpad、Firebug和JSTerm now中进行了测试。同样的结果,
09==9
。这很奇怪,因为在我的web控制台中,
parseInt(“09”)==0
ok…字符串;我使用的是数字,因为
y=09
对我来说不像字符串赋值。而且
09
不是有效的八进制数,所以它总是被解释为十进制
010
10
可能是一个更好的例子。@poke-它不被解释为十进制。它被解释为一个八进制,但由于它不是一个有效的八进制数,它只返回
0
@JamesAllardice-Meh,使用的是数字(不是字符串),所以忽略我:)
parseInt(x,10)