Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Por qué? [comparar cadenas]

Estas en el tema de Por qué? [comparar cadenas] en el foro de Javascript en Foros del Web. Hola, tengo una duda en js y otros lenguajes que me dan el mismo resultado al ejecutar las siguientes líneas: Código HTML: <script> var a ...
  #1 (permalink)  
Antiguo 12/02/2015, 09:57
 
Fecha de Ingreso: febrero-2014
Mensajes: 25
Antigüedad: 10 años, 2 meses
Puntos: 1
Pregunta Por qué? [comparar cadenas]

Hola, tengo una duda en js y otros lenguajes que me dan el mismo resultado al ejecutar las siguientes líneas:

Código HTML:
<script>
var a = '0018';
var b = '000053';

if(b>a){alert(b + ' es mayor');}
else {alert(a + ' es mayor')}
</script> 
resultado:

"0018 es mayor"



¿Por qué? ¿Cómo comparan?
  #2 (permalink)  
Antiguo 12/02/2015, 11:20
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 10 años, 8 meses
Puntos: 578
Respuesta: Por qué? [comparar cadenas]

Ocurre eso porque los estás tratando como strings y la comparación se hace literal en vez de numérica:

Código:
"0018"
"000053"
Para solucionarlo elimina las comillas y los ceros sobrantes o pásalos a int mediante parseInt() o Number()
  #3 (permalink)  
Antiguo 12/02/2015, 11:59
 
Fecha de Ingreso: febrero-2014
Mensajes: 25
Antigüedad: 10 años, 2 meses
Puntos: 1
Pregunta Respuesta: Por qué? [comparar cadenas]

Cita:
Iniciado por PHPeros Ver Mensaje
Ocurre eso porque los estás tratando como strings y la comparación se hace literal en vez de numérica:

Código:
"0018"
"000053"
Para solucionarlo elimina las comillas y los ceros sobrantes o pásalos a int mediante parseInt() o Number()
Hola PHPeros,
Sí, yo sé que son strings y a eso iba mi duda. Es decir, por qué la cadena '0018' es "¿mayor?" que la cadena '000053'?

veo que resaltas el 1 y 0 de la tercera posición en ambas cadenas.. con eso quieres decir a que es algo parecido al orden alfabético?

Gracias por tu respuesta :D
  #4 (permalink)  
Antiguo 12/02/2015, 12:43
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 1 mes
Puntos: 1329
Respuesta: Por qué? [comparar cadenas]

Si, es orden alfabetico:
Código:
0 0 1 8
0 0 0 0 5 3
    ^
__________________
Grupo Telegram Docker en Español
  #5 (permalink)  
Antiguo 12/02/2015, 13:37
Avatar de marlanga  
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 3 meses
Puntos: 206
Respuesta: Por qué? [comparar cadenas]

En realidad se hace mirando el valor hexadecimal de cada caracter UTF-8 que forma parte de la cadena. Claro que dicho ordenamiento se hizo respetando el orden alfabético, para no volver locos al personal.

Aquí pone el valor hexadecimal de cada uno de ellos:

http://www.utf8-chartable.de/

Comparar dos cadenas es mirar el valor hexadecimal de cada caracter de cada una de ellas, comparándola con el caracter en la misma posición de la otra cadena. Se miran uno a uno y de izquierda a derecha. La primera pareja de caracteres que no sean iguales decidirá el orden de una cadena con respecto a la otra.
Por si no queda claro, el valor hexadecimal es un número en base 16, asi que comparar dos valores hexadecimales es comparar dos números, que por cierto es una de las muy pocas operaciones booleanas que sabe realizar perfectamente un procesador.

Última edición por marlanga; 12/02/2015 a las 13:46
  #6 (permalink)  
Antiguo 12/02/2015, 14:43
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Por qué? [comparar cadenas]

buenas...
Cita:
Iniciado por marlanga Ver Mensaje
En realidad se hace mirando el valor hexadecimal de cada caracter UTF-8 que forma parte de la cadena.
¿estás seguro? no habrás querido decir utf16? javascript internamente manipula los strings en utf16, sin importar el encoding que le pongas al código. igual aplica cuando comparas los strings, se utilizan los valores transformados en utf16.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #7 (permalink)  
Antiguo 12/02/2015, 15:36
Avatar de marlanga  
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 3 meses
Puntos: 206
Respuesta: Por qué? [comparar cadenas]

Pues creía que era en utf8.
Espero que no me cobres $1,000 USD por esta información.
  #8 (permalink)  
Antiguo 12/02/2015, 16:16
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 1 mes
Puntos: 1329
Respuesta: Por qué? [comparar cadenas]

Si hubieras puesto una oferta en el foro equivocado con algún trabajo inútil yo también te pediría 1000USD.

Saludos
__________________
Grupo Telegram Docker en Español

Etiquetas: cadenas, comparaciones, js
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:08.