2011-10-04 8 views
9

Mam plik XML zawierającyJavaScript PRAWDA nie jest zdefiniowane ani w cudzysłowie

<car> 
    <id>123</id> 
    <sunroof>FALSE</sunroof> 
    <service>TRUE</service> 
</car> 

Poniższy kod działa tylko jeśli mogę zawinąć TRUE wewnątrz cudzysłowów np (service == "TRUE")

var service = tis.find("service").text(); 

if(service === TRUE){ 
    var service_tag = '<a title="Service" href="">Service</a>' 
} else { 
    var service_tag = ''; 
} 
+3

logiczna prawda różni się od napisu '„PRAWDA”', działa zgodnie z przeznaczeniem –

Odpowiedz

24

Bez cytowań javascript spróbuje interpretować TRUE jako wartość/wyrażenie. Nie ma wartości zdefiniowanej natywnie w javascript. Istnieje true, ale javascript rozróżnia wielkość liter, więc nie będzie wiązać TRUE z true.

Wartość, którą otrzymasz z text(), jest prymitywem string. Pisanie "TRUE" daje poprzeć string"TRUE" który ma porównania pomyślnie z wartością service

1

jej bo flaki równy sprawdź także typ i TRUE to identyfikator "PRAWDA" to wartość

// this will work 
if(service === "TRUE"){ 
    var service_tag = '<a title="Service" href="">Service</a>' 
} else { 
    var service_tag = ''; 
} 

Difference between == and === in JavaScript

1

Jest to oczekiwane.

tis.find("service").text(); zwraca ciąg, a nie boolowskość, a boolean JavaScript dla prawdy to true (wielkość liter ma znaczenie, podobnie jak wszystko inne w tym języku).

4

JavaScript boolean true i false są małymi literami.

1
var service = tis.find("service").text(); 

Powoduje zwrócenie ciągu "PRAWDA". Ponieważ === sprawdza również typ, zawsze zwraca wartość false.

1

TRUE odnosi się do zmiennej o nazwie TRUE, która nie istnieje, więc pojawia się błąd. "TRUE" to ciąg znaków zawierający znaki TRUE. Twoja zmienna service będzie zawierać ciąg znaków, więc drugie z nich są tym, czego potrzebujesz.

2

Ustaw serwis równe tym, więc JavaScript będzie mógł interpretować wartości:

var service = tis.find("service").text().toLowerCase(); 
Powiązane problemy