0

resulta que estoy trabajando con javascript y me ha tocado hacer esto.

let ejemplo = "si";

if (ejemplo == "si") {
    //realiza 'x'
} else {
    //realiza 'y'
}

Hasta ahí todo bien, si mi variable ejemplo tiene el valor "si" solo realiza 'x' y si tiene un valor diferente de "si" realiza 'y'.

Pero cuando hago este cambio ya no sucede igual

let ejemplo = "si";

if (ejemplo != "si") {
    //realiza 'x'
} else {
    //realiza 'y'
}

Cualquier valor que le doy a ejemplo solo me realiza 'x', en teoría si le doy "si", debería realizar 'y', pero no sucede eso.

Alguna idea?

Angel Cayhualla
  • 149
  • 1
  • 12
  • Proba cambiando != por !== – LcsGrz Dec 12 '18 at 21:22
  • El código debería funcionar. ¿Dónde estas ejecutando el script? – Matias Olivera Dec 12 '18 at 21:27
  • Acabo de probar ese codigo y funciona ok – Juan Dec 12 '18 at 21:28
  • @LcsGrz voy a probarlo y te comento. – Angel Cayhualla Dec 12 '18 at 21:30
  • @MatiasOlivera, si te refieres al HTML, el script lo estoy ejecutando al final, antes de la etiqueta de cierre

    .

    – Angel Cayhualla Dec 12 '18 at 21:30
  • @Juan primera vez que me ocurre eso, no sé a que se puede deber – Angel Cayhualla Dec 12 '18 at 21:31
  • Eso no debería estar pasando. Tienes más código, o solo es ese? – Miguel Angel Gonzalez Pinto Dec 12 '18 at 21:32
  • 1
    Verifica como te llega el dato tal vez te llega con un espacio al final y vos lo estas comparando con uno que no tiene ese espacio – Juan Dec 12 '18 at 21:34
  • Si el valor de `ejemplo` viene de otro sitio, conviene que la limpies con `trim`, haciendo algo así: `let ejemplo = "si".trim();` [Ver aquí para más detalles](https://es.stackoverflow.com/a/103952/29967) Sería como hacer: `let ejemplo = ReferenciaoElemento.trim();` Haciendo eso, si los datos te vienen así: `si ` o así `si\n`, quedarán limpios de espacios o saltos de línea sobrantes. – A. Cedano Dec 13 '18 at 01:29

1 Answers1

0

El problema podria estar en como los lenguajes de programación usan los 'Strings', para comprara strings se recomiendan métodos de los mismos lenguajes o frameworks de terceros. En este caso podrias resolverlo utilizando esto

string_a.localeCompare(string_b);

La funcion devolvera

0: son iguales

-1: string_a < string_b

1: string_a > string_b

Y tu funcion quedaria:

let ejemplo = "si";

if (ejemplo.localeCompare("si") !== 0) {
    //realiza 'x'
} else {
    //realiza 'y'
}
Igmer Rodriguez
  • 4,308
  • 3
  • 19
  • 44
LcsGrz
  • 698
  • 8
  • 19