2012-09-26 9 views
6

estoy convirtiendo y la comparación de dos valores de cadena usando¿Cómo se comparan dos valores de cadena como enteros?

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

El problema es que si los valores son x="9" y y="09" la prueba devuelve false.

¿Cómo puedo conseguir solucionar este problema?

+0

Por cierto .: '9' y' 09' se consideran iguales ya que '09' no es un número válido en octal y como tal se interpreta como un decimal. – poke

+0

¿De verdad? FF lo analiza a cero. – spender

+0

@spender También estoy usando Firefox; lo probé en la consola web, el bloc de notas, Firebug y JSTerm ahora. Mismo resultado, '09 == 9'. – poke

Respuesta

13

Utilice esta:

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

Si no precisa la raíz, "09" se analiza como octal (esto da 0).

MDN documentation about parseInt

Tenga en cuenta que ni siquiera debería depender de esta interpretación cuando se trabaja con representaciones octales:

ECMAScript 5 Elimina Octal Interpretación

La especificación ECMAScript 5 de la función parseInt ya no permite implementaciones tratar las series que comienzan con un carácter 0 como valores octales. ECMAScript 5 estados:

La función parseInt produce un valor entero dictado por interpretación del contenido del argumento de cadena de acuerdo con el rayo especificado. Se ignora el espacio blanco inicial en la cuerda. Si radix es indefinido o 0, que se supone que es 10, excepto cuando el número comienza con los pares de caracteres 0x o 0X, en cuyo caso un radix de 16 es asumido. Si radix es 16, el número también puede comenzar opcionalmente con pares de caracteres 0x o 0X.

Esto difiere de ECMAScript 3, que desalentó pero permitió octal interpretación.

Dado que muchas implementaciones no han adoptado este comportamiento a partir de 2011, y debido a que los navegadores más antiguos deben ser compatibles, especifique siempre una raíz.

Simplemente:

especifique siempre una raíz

+3

+1, pero se analiza como octal, no hexadecimal. –

+0

@JamesAllardice tienes razón (es hexa cuando tienes 0x) –

+0

Además, '9 == 0x09' ... –

3

Es necesario fijar la base explicitelly a 10 de lo contrario, asuma que es de 8 (javascript malas partes):

parseInt(x,10) 

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

Si la cadena comienza con "0", la raíz es 8 (octal). Esta característica es obsoleta

Cuestiones relacionadas