2012-05-05 20 views
12

Jaka jest różnica między tymi dwoma? Od Rubiego, jestem przyzwyczajony do ustawienia apple ||= walrus ustawienia jabłka równego morsowi tylko wtedy, gdy jabłko ma wartość zerową. Wydaje się, że to samo w JS/CS, chociaż? Wydaje się robić to samo. Co mnie niepokoi to:W jaki sposób operator "|| =" różni się od "? =" W CoffeeScript?

apple = 0 
walrus = 9 
apple ?= walrus // outputs 0 
apple ||= walrus // outputs 9 

wat

Odpowiedz

18

Najlepszą rzeczą do zrobienia byłoby spojrzenie na wynikowy JS.

coffeescript:

apple = 0 
walrus = 9 
apple ?= walrus // outputs 0 
apple ||= walrus // outputs 9 

JavaScript:

var apple, walrus; 
apple = 0; 
walrus = 9; 
if (apple == null) apple = walrus; 
apple || (apple = walrus); 

Jak widać, ?= wyraźnie sprawdza coś jest null lub undefined w JS. Jest to bardzo odmienne od ||=, które polega tylko na tym, czy apple jest wartością falsyfikacyjną.

Aby rozszerzyć nieco więcej, apple ||= walrus jest równoważne w znaczeniu do apple = apple || walrus, więc każda wartość jabłka, która jest prawda, spowoduje zwarcie w logice i nie zmieni wartości jabłka.

+0

Ta ostatnia linia pozwoliła mi to zrozumieć. Dziękuję Ci. – Chris

+0

@Chris Cool, miło mi pomóc. – loganfsmyth

+2

(Dla zwykłego czytelnika: 'undefined == null' jest prawdziwe w JavaScript.' Undefined' i 'null', dwie fałszywe-y, są jedynymi * wartościami' x', które skutkują 'x == null 'bycie prawdziwym.) –

3

?= jest egzystencjalna operator . Sprawdza przed null i undefined.

||= sprawdza, czy wartość zmiennej ma wartość "nie fałsz", jeśli dobrze pamiętam ... oznacza to, że 0 ma wartość false.

Powiązane problemy