2012-06-28 17 views
10

To nie ma sensu do mnie, ale mam wrażenie, widziałem kodu za pomocą tego:Czy możesz dodać warunek do deklaracji zmiennej?

var abc = def || ghi; 

Moje pytanie brzmi, czy to jest ważne? Czy możemy dodać warunek do deklaracji zmiennej? Wyobrażam sobie, że odpowiedź brzmi "nie", ale mam to w głowie, że raz widziałem coś podobnego w kodzie.

Odpowiedz

17

To daje do abc wartość def jeśli nieprawdaż” t falsy (tj. nie false, null, undefined, 0 lub pusty ciąg znaków), lub wartość ghi, jeśli nie.

Jest to odpowiednik:

var abc; 
if (def) abc = def; 
else abc = ghi; 

ten jest powszechnie stosowany do opcji:

function myfunc (opts) { 
    var mything = opts.mything || "aaa"; 
} 

Jeśli zadzwonisz myfunc({mything:"bbb"}) wykorzystuje wartość dajesz. Używa "aaa", jeśli nic nie dostarczysz.

W tym przypadku, aby pozwolić rozmówcy całkowicie pominąć parametr, możemy również rozpoczęły funkcję z

opts = opts || {}; 
+0

+1. Dokładniejsze może być stwierdzenie, że "def" ma wartość "true", ponieważ jeśli jest to "0", pusty łańcuch, "fałsz" itd., Wówczas 'abc' otrzyma wartość' ghi'. –

3

Tak, można dodać warunek do deklaracji zmiennej

Można go używać tak,

function greet(person) { 
    var name = person || 'anonymouse'; 
    alert('Hello ' + name); 
} 
greet('jashwant'); 
greet();​ 

jsfiddle demo

0

porządku, widać, że jest coś takiego, to albo sprawdzić, czy ktoś jest prawdziwy . Prawda zostanie zwrócona. :)

var abc = def || ghi; 

jest równoznaczne z:

var abc = return (def == true) or (ghi == true) 
+2

Ostrożnie. Twoja odpowiedź oznacza, że ​​ta operacja zawsze przypisuje wartość boolowską. Jest to ** tylko ** w przypadku, gdy 'def' i' ghi' są wartościami logicznymi. We wszystkich przypadkach 'abc' przyjmie wartość' ghi' (bez względu na wartość) _nie ma znaczenia, że ​​'def' odwołuje się do true_. Jeśli 'def' to" hello ", to abc będzie" cześć "(nie booelan). Jeśli 'def' to false/empty/zero/undefined/etc., A' ghi' to "world", to 'abc' będzie" światem "(znowu nie boolean). – user113215

6

Kod var abc = def || ghi;

jest to samo, co

if (def) { //where def is a truthy value 
    var abc = def; 
} else { 
    abc = ghi; 
} 

Chcesz warunek jak if?

if (xxx==="apple") { 
    var abc = def; 
} else { 
    abc = ghi; 
} 

który jako napisany jako operatora potrójnego wynosi:

var abc = (xxx==="apple") ? def : ghi; 
+0

Właśnie zobaczyłem na żywo przykład tego, co czytałem wczoraj (javascript hoist). Nawet jeśli 'def' jest fałszywe w twoim pierwszym przykładzie,' abc' nie jest globalne. Czy mam rację ? – Jashwant

+0

'abc' może być globalne, zależy tylko od tego gdzie jest zdefiniowane. – epascarello