Uwielbiam ||=
mechanizm Ruby . Jeśli zmienna nie istnieje lub istnieje nil
, utwórz ją i ustaw jako coś:
amount # is nil
amount ||= 0 # is 0
amount ||= 5 # is 0
Muszę teraz zrobić coś podobnego w JavaScript. Jaka jest konwencja lub właściwy sposób, aby to zrobić? Wiem, że ||=
to nieprawidłowa składnia. 2 oczywiste sposoby radzenia sobie z tym to:
window.myLib = window.myLib || {};
// or
if (!window.myLib)
window.myLib = {};
x
jest fałszywa, na przykładfalse
, i chcesz ustawić wartość domyślną tylko wtedy, gdyx
jest niezdefiniowana.let amount = 0;
a następnieamount = amount || 5
zmieni liczbę na 5. Jeśli nie chcesz, aby tak się stało, użyj??
operatora zamiast||
.amount ??= 5;
.Możesz użyć logicznego operatora OR,
||
który ocenia jego prawy operand, jeślilVal
jest fałszywą wartością.Do fałszywych wartości należą np
null, false, 0, "", undefined, NaN
źródło
x
jest fałszywa, na przykładfalse
, i chcesz ustawić wartość domyślną tylko wtedy, gdyx
jest niezdefiniowana.Jeśli pracujesz z obiektami, możesz użyć destrukturyzacji (od ES6) w następujący sposób:
... ale nie zyskujesz nic poza zaakceptowaną odpowiedzią, z wyjątkiem zamieszania.
źródło
Operator, o który pytałeś , został zaproponowany jako funkcja w JavaScript . Obecnie jest na etapie 3 , więc nie jest jeszcze oficjalną częścią języka, ale zostanie zaakceptowany, z co najwyżej niewielkimi zmianami, jeśli wykryją poważne niespodziewane problemy.
Możesz go teraz używać za pomocą wtyczki Babel plugin-offer-logical-assignment operator . Nigdy nie używałem tej wtyczki, więc nie mam pojęcia, jak dobrze to działa.
źródło
Przypisanie Rubiego || = operator zwarcia. Można to sobie wyobrazić w ten sposób:
Więc w javascript wygląda to bardzo podobnie:
Wydaje się jednak, jak wskazano w komentarzach poniżej, że ta dosłowna forma rubinowa jest mniej wydajna niż standardowy idiom javascript a = a || b.
Dla odniesienia: http://www.rubyinside.com/what-rubys-double-pipe-or-equals-really-does-5488.html
źródło
a = a || b
forma jest bardziej optymalna jsperf.com/x-or-x-equals-0-vs-x-equals-x-or-0/3a = a || b
.a || (a = b)
ma poprawną semantykę do wnioskowania nazw funkcji. Obecnie trwa dyskusja nad nowym wnioskiem.Możesz osiągnąć pożądane zachowanie za pomocą operatora | = w javascript tylko dla liczb całkowitych. Ale najpierw musisz zdefiniować zmienną.
Do obiektów
Dla tablic
źródło
|
ani|=
. Pożądane zachowanie w pytaniu nie jest związane z operacjami bitowymi.