2012-07-20 18 views
6

Próbuję użyć operatora potrójnego do sprawdzenia, czy wartość elementu XML ma wartość null. Jeśli tak jest, chcę, aby zmienna była jedną rzeczą. Jeśli nie, to chciałbym, aby zwrócił wartość elementu. To jest to, co do tej pory miałem.Używanie operatora trójskładnikowego do ustawiania zmiennej

var rating = data.getElementsByTagName("overall_average")[0].childeNodes[0].length > 0 ? data.getElementsByTagName("overall_average")[0].childeNodes[0].nodeValue : "It is empty"; 

Odpowiedz

5

Najkrótsza droga:

var rating = (data.getElementsByTagName('overall_average')[0].childNodes[0] || {}).nodeValue || 'It is empty'; 
+0

Proszę wyjaśnić? – mplungjan

+0

@mplungjan, Użyłem operatora '||', aby sprawdzić null w moim przykładzie. Tak więc, jeśli masz coś takiego: 'var x = null || {}; 'wtedy x będzie pustym obiektem' zamiast 'null'. Możesz użyć '||' również do właściwości: 'var x = {} .someProp || "cześć"; ', x będzie" "cześć". –

+0

Dzięki! Czy mógłbyś wyjaśnić, w jaki sposób sprawdziłbym, czy ta sama zmienna jest liczbą w potrójnym operatorze? –

11

tutaj:

var node = data.getElementsByTagName('overall_average')[0].childNodes[0]; 
var rating = node ? node.nodeValue : 'It is empty'; 

Zauważ, że ten kod rzuca (błąd) w przypadku nie ma ani jednego „overall_average” elementem data, więc warto zabezpieczyć się przed takim wypadku, jeśli to konieczne ...

+0

To nadal rzucać NaN jako wartość ratingu. –

+0

Nie rozumiem, dlaczego tak się stało. Odwołujemy się tylko do węzła i uzyskujemy jego 'nodeValue'. Polecam ustawienie punktu przerwania i sprawdzanie, czy 'węzeł' jest rzeczywiście odwołanie węzeł ... –

+0

Dzięki. Właśnie to zrobiłem. Była wtyczka, która próbowała zaokrąglić zmienną oceny. Przeniosłem moje kodowane do anonimowej funkcji i to wystarczyło. Jednak na przyszłość, czy wiesz, jak sprawdzić, czy zmienna jest liczbą i wypluć coś na podstawie wyniku? Jeszcze raz wolałbym, żeby był w trójskładnikowym operatorze. –

1

Twoja trójpodziałowa operacja wygląda dla mnie dobrze. Jedna rzecz, którą chciałbym zasugerować (dla czytelności i zwięzłości) jest zdefiniowanie twojego obiektu overall_average jako zmiennej i odniesienie po nim.

var overall_average = data.getElementsByTagName("overall_average")[0].childeNodes[0]; 
var rating = overall_average.length > 0 ? overall_average.nodeValue : "It is empty"; 

Powodzenia!

+0

Dzięki. Ma to sens, ale wyczuwam, że przeglądam listę elementów, to będzie dwie linie na zmienną, którą próbuję ustawić. –

Powiązane problemy