Mam wymóg zastosowania ??
operatora C # do JavaScript i nie wiem jak. Rozważ to w C #:
int i?=null;
int j=i ?? 10;//j is now 10
Teraz mam to ustawione w JavaScript:
var options={
filters:{
firstName:'abc'
}
};
var filter=options.filters[0]||'';//should get 'abc' here, it doesn't happen
var filter2=options.filters[1]||'';//should get empty string here, because there is only one filter
Jak mam to zrobić poprawnie?
Dzięki.
EDYCJA: zauważyłem połowę problemu: nie mogę używać notacji „indeksatora” do obiektów ( my_object[0]
). Czy jest sposób, aby to ominąć? (Nie znam wcześniej nazw właściwości filtrów i nie chcę ich iterować).
javascript
Walentyna Wasiljewa
źródło
źródło
0
,false
, pusty ciąg znaków), chciałbym zrobić coś takiego zamiast:var j = (i === null) ? 10 : i;
Który będzie tylko wymienićnull
, niż cokolwiek, co można ocenić na false.i
jest niezdefiniowana, spowoduje to błąd. wydaje mi się bezużyteczne, więc ... (?)var j = (i != null ? i : 10);
powinno działać, ponieważundefined
jest==
null, więci != null
jestfalse
dla obunull
iundefined
.Nie; literał obiektu, jak sama nazwa wskazuje, jest obiektem , a nie tablicą, więc nie można po prostu pobrać właściwości na podstawie indeksu, ponieważ nie ma określonej kolejności ich właściwości. Jedynym sposobem na pobranie ich wartości jest użycie określonej nazwy:
Lub iterując je za pomocą
for ... in
pętli:źródło
for in
pętla JS działa tylko na literałach obiektów! Zawodzi żałośnie na tablicach JS (daje indeks) i mapach JS (dajeundefined
). Mam nadzieję, że o tym nie zapomnisz, aby nie zaskoczyć Cię debugowanie! xPOdpowiedź ES2020
Nowy Nullish Coalescing Operator jest wreszcie dostępny w JavaScript, chociaż obsługa przeglądarek jest ograniczona. Według danych caniuse obsługiwanych jest tylko 48,34% przeglądarek (stan na kwiecień 2020).
Zgodnie z dokumentacją
Zapewni to, że obie zmienne będą miały wartość zastępczą
''
iffilters[0]
lubfilters[1]
sąnull
lubundefined
.Zwróć uwagę, że zerowy operator łączenia nie zwraca wartości domyślnej dla innych typów fałszywych wartości, takich jak
0
i''
. Jeśli chcesz uwzględnić wszystkie fałszywe wartości, powinieneś użyć operatora OR||
.źródło
Logiczne przypisanie zerowe, rozwiązanie 2020+
Nowy operator jest obecnie dodawany do przeglądarek
??=
. Jest to równoważne zvalue = value ?? defaultValue
.||=
a&&=
także będą dostępne, linki poniżej.Sprawdza, czy lewa strona jest niezdefiniowana lub zerowa, zwarcie, jeśli jest już zdefiniowane. Jeśli nie, lewej stronie przypisywana jest wartość po prawej stronie.
Podstawowe przykłady
Przykłady obiektów / tablic
Przykład funkcjonalny
?? = Obsługa przeglądarek, lipiec 2020 r. - 0,03%
?? = Dokumentacja Mozilli
|| = Dokumentacja Mozilli
&& = Dokumentacja Mozilli
źródło
Rozwiązanie niszczące
Treść pytania mogła się zmienić, więc postaram się dokładnie odpowiedzieć.
Destrukturyzacja pozwala wyciągać wartości z wszystkiego, co ma właściwości. Można również zdefiniować wartości domyślne, gdy null / undefined oraz aliasy nazw.
Jeśli pracujesz z tablicą, oto jak to zrobić.
W tym przypadku nazwa jest wyodrębniana z każdego obiektu w tablicy i otrzymuje własny alias. Ponieważ obiekt mógł nie istnieć,
= {}
został również dodany.Bardziej szczegółowy samouczek
Wsparcie przeglądarek 92% lipiec 2020
źródło