2012-02-12 13 views
5

Realmente no sé cómo es posible, y no pude reproducir el error en un entorno simplificado, por ejemplo, JSFiddle. Pero así es como se ve en mi aplicación.Comportamiento de JavaScript misterioso: desigual es igual a

Estoy tratando de convertir el valor que puede ser cadena 'Verdadero', 'Falso' o 'algo más' en booleano si es verdadero o falso. En la mayoría de los casos funciona muy bien (aunque pueden ser una forma más pulido de hacer la conversión) como se muestra en la imagen siguiente

enter image description here

embargo

en ocasiones se produce un error y el valor del reloj muestra como siga:

enter image description here

Así que de repente variable de cadena con un valor de "verdad" no es igual a una cadena "verdadera" literal. Estoy perdido. ¿Como es posible? ¿Que me estoy perdiendo aqui?

Gracias de antemano

Respuesta

4

Tal vez sus cadenas contienen caracteres que las herramientas de depuración no muestran. He aquí un ejemplo en la Consola de Google Chrome:

> var a = "foo"; 
> var b = "foo\r"; 
> a 
"foo" 
> b 
"foo" 
> a === b 
false 

Es muy difícil decir lo que está pasando en su caso, pero se puede trabajar con los .length y .charAt(i) propiedades de las cadenas 'misteriosos' para averiguar lo que está pasando.

+2

sí, lo hice yo mismo y estaba tratando de publicar una respuesta (que es algo que no puedo hacer en 8 horas) aparece) Ok, lo tengo! Publicar sus preguntas en stackoverflow es útil por sí mismo. Comprobé 'value.length' y me sorprendió ver' 5' que quedaba '\ 0' después de deserializar los datos del servidor. – michal

+0

Un simple 'console.log (value.split (" "));' podría ayudar a resolver qué está pasando. –

+0

Cadenas terminadas nulas. yay –

0

Sólo por la cordura, la prueba para === "True", utilizando comillas dobles en lugar de una sola. Es no importa, pero simplemente descartar :)

+0

lo hice antes de publicar pero me sentí muy tonto al hacerlo, pensé que me estaba volviendo loco y es hora de hacer la pregunta aquí. Obviamente, los resultados fueron, como se esperaba, inesperados e incorrectos. Pero al menos consistente. – michal

+0

@Joe la lógica es correcta, o tendrá un valor booleano verdadero o falso o el valor como una cadena – zatatatata

+0

Vuelva a leer, tiene razón :) eliminó ese comentario. – Joe