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)