2013-05-08 14 views
6

zwykle ustawione tak jak właściwości obiektów,Jak łatwo ustawić zmienną na wartość false z wartością domyślną true?

// Boolean 
this.listening = config.listening || true; 

Ale config.listening jest albo prawdziwe, albo fałszywe, aw tym przypadku this.listening zawsze będzie prawdą, ponieważ jeśli jest fałszywe config.listening będzie równa prawdziwe.

Czy istnieje lepszy sposób ustawiania tych właściwości boolowskich bez konieczności wykonywania instrukcji if?

Czy istnieje funkcja isset w javascript, aby sprawdzić, czy istnieje, a nie to, co jest równa?

Odpowiedz

12

Można użyć potrójny (Warunkowo) operator takiego:

this.listening = config.listening === false ? false : true; 

Jeśli config.listening jest false, this.listening jest ustawiony na false. Jeśli jest to jakakolwiek inna wartość, jest ustawiona na true.

Jeśli chcesz sprawdzić, czy jest zdefiniowana, można użyć:

this.listening = typeof config.listening !== "undefined" 

Referencje:

+1

Dzięki za to przepracowałem – user2251919

+0

ha. Webstorm właśnie uprościł twoją odpowiedź na: config.listening! == false, wydaje się być poprawny. –

+1

@AlexMills Masz absolutną rację! Skraplanie jest zdecydowanie możliwe, starałem się być jednoznaczny/opisowy, kiedy to napisałem (domyślam się). – Ian

3

Trzeba sprawdzić, aby upewnić się, że jest nie jest nieokreślony, nie jest to wartość "falsey".

this.listening = config.listening!==undefined ? config.listening : true; 
+0

... lub '' listen 'in config' ewentualnie – Pointy

+1

Czy to wystarczy? lepiej zrobić 'typeof config.listening! ==" undefined "' lub czy to tylko czynnik czytelności – user2251919

+0

Tak, byłoby lepiej. (Lub "słuchanie" w config). Zobacz to pytanie, aby porozmawiać na ten temat: http://stackoverflow.com/questions/519145/how-can-i-check-whether-a-variable-is-definited-in-javascript –

-1

Najszybszym sposobem byłoby to.

d = true; 

d zwraca wartość true.

Następnie wystarczy użyć! operator, aby przełączyć wartość logiczną z true na false.

d = !d; 

d zwraca wartość false.

Potem i znowu.

d = !d; 

d zwraca wartość true.

+1

Aby dokładniej objaśnić odpowiedź na OP, możesz dodać te informacje. 'this.listening = !! config.listening'. Dwa NOTy zachowują rzeczywistą wartość boolowską, ale powodują, że 'null' lub' undefined' ma wartość 'false'. Ale to znowu nie jest PO. Osoba szuka wartości domyślnej jako "true", nawet jeśli 'config.listening' ma wartość' undefined' – Lokesh