我正在使用转换和比较两个字符串值
if (parseInt(x)!=parseInt(y)) {
问题是如果值是x="9"
并且y="09"
测试返回false
。
我怎样才能解决这个问题?
我正在使用转换和比较两个字符串值
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。如果 radix 为 16,则 number 也可以选择以字符对 0x 或 0X 开头。
这与 ECMAScript 3 不同,后者不鼓励但允许八进制解释。
由于截至 2011 年许多实现尚未采用此行为,并且必须支持较旧的浏览器,因此请始终指定基数。
简单地 :
总是指定一个基数
您需要将基数显式设置为 10,否则它假定它是 8(javascript 坏部分):
parseInt(x,10)
http://www.w3schools.com/jsref/jsref_parseint.asp
如果字符串以“0”开头,则基数为 8(八进制)。此功能已弃用