我正在使用
转换和比较两个字符串值if (parseInt(x)!=parseInt(y)) {
问题是如果值为x="9"
且y="09"
,则测试返回false
。
我该如何解决这个问题?
答案 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(八进制)。这个功能是 弃用