2012-02-12 8 views
5

Non so davvero come sia possibile e non riesco a riprodurre l'errore in un ambiente semplificato, ad esempio JSFiddle. Ma ecco come appare nella mia applicazione.Comportamento javascript misterioso: diseguale uguale a

Sto provando a convertire il valore che può essere 'True', 'False' o 'qualcos'altro' stringa in booleano se è True o False. Nella maggior parte dei casi funziona bene (anche se possono essere un modo trasandato di fare la conversione) come mostrato sulla foto qui sotto

enter image description here

tuttavia a volte non riesce e il valore dell'orologio mostra come seguire:

enter image description here

Così improvvisamente variabile stringa con un valore di "true" non è uguale a una stringa "true" letterale. Mi sono perso. Come è possibile? Cosa mi manca qui?

Grazie in anticipo

risposta

4

Forse le stringhe contengono caratteri che i tuoi strumenti di debug non mostrano. Ecco un esempio in Console di Google Chrome:

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

E 'davvero difficile dire che cosa sta succedendo nel vostro caso, ma si potrebbe lavorare con i .length e .charAt(i) proprietà delle stringhe 'misteriosi' per scoprire cosa sta succedendo.

+2

sì, ci sono arrivato e stavo provando a postare una risposta (che è qualcosa che non posso fare entro 8 ore sembra) Ok, capito! Pubblicare le tue domande su StackOverflow è utile da solo. Ho controllato 'value.length' e sono stato leggermente sorpreso di vedere' 5' era un '\ 0' rimasto dopo aver deserializzato i dati dal server. – michal

+0

Un semplice 'console.log (value.split (" "));' potrebbe aiutare a capire cosa sta succedendo. –

+0

Stringhe terminate da null. yay –

0

Proprio per la sanità mentale, prova per === "True", usando le virgolette piuttosto che singolo. È non dovrebbe importare, ma è sufficiente escluderlo :)

+0

lo ha fatto prima di postare, ma mi sono sentito davvero stupido a farlo, ho pensato che stavo impazzendo ed è ora di fare la domanda qui. Ovviamente i risultati sono stati, come previsto, inaspettati e sbagliati. Ma almeno coerente. – michal

+0

@Se la logica è corretta, avrà o un valore booleano vero o falso o il valore come una stringa – zatatatata

+0

riletta, hai ragione :) eliminato quel commento. – Joe