2009-09-04 25 views
15

Używam dużej biblioteki JS do wykonywania określonych operacji rysowania w obszarze roboczym. Przeglądając kod biblioteki (w celu wprowadzenia zmian), natknąłem się na "||" operator jest używany w sposób, który z pewnością nie powinien być oceniany jako Boolean. Czy to oznacza, że ​​jest to inny operator, czy też brakuje mi czegoś oczywistego? Przykład podany jest poniżej:JavaScript || operator

var $time = Date.now || function(){ 
return +new Date; 
}; 
+0

Zgaduję, że byłoby, gdyby Date.now z jakiegoś powodu zwróciło 0, to zamiast tego ustawiałbyś $ czas na wartość zwracaną funkcji ...? – peirix

+0

@peirix: Zgadłeś źle. $ time będzie funkcją zwracającą bieżącą datę. Jest ustawiony jako alias Date.now, jeśli został zdefiniowany (nie jest fałszem) lub dostarczona funkcja w przeciwnym razie. –

+0

Ah, dlatego nie ustawiłem tego jako odpowiedzi.Nie ma mowy o odrzuceniu komentarza: p Czy trzeba zatem wiedzieć więcej na temat zmiennej "Date.now", aby wiedzieć, jak to będzie działać? – peirix

Odpowiedz

13

|| operator ocenia pierwszego argumentu operacji, jeżeli może on być przekształcony w prawdziwe, czy ostatni argumentu inaczej. Tak więc w twoim przykładzie $time będzie Date.now, jeśli istnieje lub zadeklarowana funkcja w przeciwnym razie.

+0

To pierwszy niefałszywy operant. –

+10

Nie pierwszy operand, który można przekonwertować na true. Ostatnie wyrażenie jest używane, nawet jeśli zostanie skonwertowane na false. – googletorp

0

To jest bardzo często spotykane w javascript. Jeśli Data.now ma wartość true, to $ time jest ustawione na to, w innym przypadku jest ustawione na funkcję.

+0

Funkcja nie ma() dołączonego do nawiasu zamykającego, więc $ czas jest ustawiony na funkcję, a nie na wyjście. – Quentin

+0

Ach, tak, masz rację, tęsknię za tym w pośpiechu. Zaktualizowano. – googletorp

0

Wierzę, że kod mówi, jeśli zmienna DateTime.now nie istnieje, zamiast tego zwróć wynik +new Date.

+1

Można również powiedzieć, że DateTime.now to '', 0, false, null –

0

Operator || jest używany do przypisania wartości $time w przykładzie.

Jeśli wartość jest równa , to $time ma przypisaną wartość po prawej stronie operatora || (w tym przypadku jest to funkcja). Jeśli Date.now ma wartość "prawda", oznacza to "short-cicuit" i przypisuje wartość Date.now do $time

17

Istnieje już zaakceptowana odpowiedź, ale chciałbym wspomnieć, że operator OR jest również nazywany Domyślnym operatorem, ponieważ nie zwraca wartości boolowskiej, lecz zamiast niej argumenty lewej lub prawej ręki.

To samo dotyczy operatora AND, który jest również nazywany strażnikiem.

Wyjazd crockford's Survey of the JavaScript Programming Language więcej szczegółów:

& & operator jest powszechnie nazywany logiczne i. Można go również nazwać strażnikiem. Jeśli pierwszy operand ma wartość false, null, undefined, "" (pusty łańcuch) lub numer 0, to zwraca pierwszy operand. W przeciwnym razie zwraca drugi operand. Zapewnia to wygodny sposób napisania testu zerowego:

var value = p & & p.nazwa;/* Wartość nazwy zostanie pobrana tylko z p, jeśli p ma wartość, unikając błędu. */

The || operator jest zwykle nazywany logicznym lub. Można go również nazwać domyślnym. Jeśli pierwszy operand ma wartość false, null, undefined, "" (pusty łańcuch) lub numer 0, to zwraca drugi operand. W przeciwnym razie zwraca pierwszy operand. Zapewnia to wygodny sposób określania wartości domyślnych:

wartość = v || 10;/* Użyj wartości v, ale jeśli v nie ma wartości, użyj zamiast tego 10. */