Nowe posty

xx Problem ze sterownikami. (5)
2024-04-13, 21:25:16
xx Instalacja xfce4 (2)
2024-04-13, 16:20:17
xx Serie kompilacji bez instalacji dla “emerge” w Gentoo (2)
2024-04-08, 18:40:04
xx Plasma 6 w Neonie ssie trochę mniej ... (17)
2024-04-05, 10:03:46
xx Problem z Linux Lite po instalacji (3)
2024-04-03, 14:23:40
xx Jak właczyć num locka przy starcie systemu debian 12? (12)
2024-04-02, 17:43:54
xx Brak dźwieku w systemie. (5)
2024-04-02, 16:13:41
xx Dystrybucja pod HP Omen (7)
2024-03-29, 11:33:05
xx [Poradnik] Wyszukiwanie Sterowników (2)
2024-03-27, 21:08:23
xx Ile pingwinów? (1)
2024-03-27, 08:59:24

Autor Wątek: [Javascript] Operator "||=" (object, object)  (Przeczytany 563 razy)

Offline

  • Users
  • Stały bywalec
  • ***
  • Wiadomości: 111
    • Zobacz profil
[Javascript] Operator "||=" (object, object)
« dnia: 2024-02-01, 20:16:03 »
Kompiluję kod w emscripten i mam problem. WebView androida wyrzuca mi, że nie zna operatora ||= . Postanowiłem dodać kod JavaScript, co w prototypie object sprawdza, czy taki operator został zdefiniowany. Jeżeli nie, to definiuje moją implementację. Problem tylko taki, że nie mogę znaleźć dokumentacji tego operatora. Znalazłem jedynie, że jest to logiczne OR na lewej i prawej stronie wyrażenia, a wynik jest zapisywany do lewej. Czy dla obiektu, to dodaje pola z wartościami z prawej strony wyrażenia do obiektu z lewej, jednocześnie nadpisując pojawiające się w obu obiektach?

Offline 1709

  • Users
  • Guru
  • *****
  • Wiadomości: 2765
  • 1709
    • Zobacz profil
PS: Brak polskiej czcionki, nie jest to brak lenistwa, a jej brak w systemie i brak czasu na reczne poprawki.

Offline

  • Users
  • Stały bywalec
  • ***
  • Wiadomości: 111
    • Zobacz profil
Odp: [Javascript] Operator "||=" (object, object)
« Odpowiedź #2 dnia: 2024-02-02, 19:33:27 »
Z internetu
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_OR_assignment
Czytałem te źródło, ale nie ma opisu, co robi Obiekt1 ||= Obiekt2 . Przynajmniej ja nie zauważyłem.

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3056
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
Odp: [Javascript] Operator "||=" (object, object)
« Odpowiedź #3 dnia: 2024-02-02, 20:20:13 »
Cytuj
Czytałem te źródło, ale nie ma opisu, co robi Obiekt1 ||= Obiekt2 . Przynajmniej ja nie zauważyłem.

Jest WSZYSTKO napisane.

Cytuj
x ||= y is equivalent to x || (x = y)
Trochę z du*y opis, bo w każdym normalnym języku (a jak powszechnie wiadomo, JS nie jest normalny) x ||= y rozwija się na x = (x||y), ale efekt końcowy jest ten sam.

Z kolei w definicji ||:
Cytuj
x || y -- If x can be converted to true, returns x; else, returns y.

Jeżeli x jest truthy, nic się nie dzieje. Jeżeli x nie jest truthy (w opisie || masz pełną listę rzeczy nie-truthy), to jest ustawiane na y. JS ma w pompce, jakie typy danych są w x i y. Albo robi przypisanie (zwykłe, bez magicznego łączenia zawartości) albo nie.

Trochę na około napisane

if (!x){
 x = y
}
« Ostatnia zmiana: 2024-02-02, 20:23:06 wysłana przez Paweł Kraszewski »
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

Offline

  • Users
  • Stały bywalec
  • ***
  • Wiadomości: 111
    • Zobacz profil
Odp: [Javascript] Operator "||=" (object, object)
« Odpowiedź #4 dnia: 2024-02-03, 12:36:45 »
Cytuj
Czytałem te źródło, ale nie ma opisu, co robi Obiekt1 ||= Obiekt2 . Przynajmniej ja nie zauważyłem.

Jest WSZYSTKO napisane.

if (!x){
 x = y
}

Dzięki! Szukałem jawnego odwołania do obiektów, a z moją znajomością języka angielskiego, jest kiepsko.

if (!x){
 x = y
}
Czyli już rozumiem. Zaimplementuję to.

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3056
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
Odp: [Javascript] Operator "||=" (object, object)
« Odpowiedź #5 dnia: 2024-02-03, 15:06:31 »
Ummm. Jakby ci zapomnieli powiedzieć, JS nie ma obiektów w podręcznikowym znaczeniu (jak w Javie albo C++)...

To co uważasz za "obiekty" to są mapy (aka. tablice asocjacyjne). JS-owe "pola" to po prostu elementy tej tablicy, zaś "metody" korzystają z tego samego mechanizmu - lambdy (funkcji anonimowej, domknięcia - w różnych językach różnie to się nazywa) trzymanej w tej tablicy. Kilka "magicznych" indeksów tablicy umożliwia np. tworzenie prototypów. 

JS wychodzi z założenia, że jeżeli coś wygląda jak kaczka i kwacze jak kaczka... Zresztą podobnie jest w większości języków skryptowych. Z jednej strony tak prymitywne metody ma Lua. Z drugiej prawdziwą obiektowość (z dziedziczeniem i całym ceremoniałem) mają Ruby czy Python.
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy