-
Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!.P
OSTED!not-for-mail
From: bartekltg <b...@g...com>
Newsgroups: pl.comp.programming
Subject: Re: popaprany JS
Date: Mon, 27 Mar 2017 20:42:41 +0200
Organization: ATMAN - ATM S.A.
Lines: 108
Message-ID: <obbmf2$5ps$1@node1.news.atman.pl>
References: <j6xj1vxv7su9$.dlg@tyczka.com>
NNTP-Posting-Host: 89-70-119-159.dynamic.chello.pl
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit
X-Trace: node1.news.atman.pl 1490640162 5948 89.70.119.159 (27 Mar 2017 18:42:42 GMT)
X-Complaints-To: u...@a...pl
NNTP-Posting-Date: Mon, 27 Mar 2017 18:42:42 +0000 (UTC)
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101
Thunderbird/45.8.0
In-Reply-To: <j6xj1vxv7su9$.dlg@tyczka.com>
Xref: news-archive.icm.edu.pl pl.comp.programming:210352
[ ukryj nagłówki ]On 27.03.2017 19:02, Roman Tyczka wrote:
>
> Próbuję przekonwertować kawałek kodu z JS na delphi, ale poziom zakręcenia
> mnie przerósł, proszę o pomoc w wyjaśnieniu ludzkim językiem co tu się
> dzieje:
>
>
> function(e, s, i)
> {
> var n, a, o = "",
> l = t.isArray(e),
> r = 0;
> for (n = 0, a = s.length; n < a; n += 1) "+" === s.charAt(n) ? o +=
> i.charAt(n) : "*" === s.charAt(n) && (o += l ? e[r++].value :
> e.charAt(r++));
> return o
> }
>
> Jako, że JS ma typowanie między pośladkami to typy wejściowe odgaduje z
> szerszego kontekstu, którego tu nie umieszczam by nie mącić, jako:
>
> e - chyba tablica, w każdym razie wynik funkcji z jQuery
> this.ui.maskedInput.serializeArray()
>
> s - to string z maską złożoną ze znaków + i *
> // "mask": "+++*+*+***++++++++++++++++++++++"
>
> i - to sól w łanćuchu tekstowym
> // "salt": "rDUrqpBMmlNGJQgk87uKCUGMlK4dU51R",
>
>
> Całość to kawałek formularza logowania, a konkretnie wyliczania hasha z
> hasła.
>
> Proszę szczególnie o rozwikłanie tej pętli, czyli konkretnie tego:
>
> "+" === s.charAt(n) ? o += i.charAt(n) : "*" === s.charAt(n) && (o += l ?
> e[r++].value : e.charAt(r++));
>
> To koszmarek jakiś :-)
Jeśli to dobrze rozumiem, to genialny przykład "chackerstwa" (tak, ch;))
"+" === s.charAt(n) ? o += i.charAt(n)
Na razie prosto. Operator trójargumentowy ?: jak w c++.
Czy n-ta (kto normalny iteruje po n, czyję się zgorszony!:)
literaka s to "+"
(porównujemy ===, bo == jest miękkie :)
https://dorey.github.io/JavaScript-Equality-Table/ )
Jeśli tak, to dodajemy literkę na koniec o,
o += i.charAt(n)
(nie wynika nic z tego, co jest po :)
jeśli nie, to (co innego, o tym poźniej).
Zawsze używałem ?: w formie
x = b?a:b;
a tu jety użyte po prostu jako if(b) a() : b();
Poza zmyleniem przeciwnika chyba nie ma nic w tym złego:)
Teraz zaczynają się schody, jeśli s[n] nie ejst plusem,
wykona się to:
"*" === s.charAt(n) && (o += l ? e[r++].value : e.charAt(r++))
Nieco rozszerzając:
"*" === s.charAt(n)
&&
(o += l ? e[r++].value : e.charAt(r++))
Sztuczka polega na tym, że to wyrażenie wylicza
się do boola. Jeśli s[n] to '*', zadziała
leniwa ewaluacja i nawias się nie wykona.
Jeśli jest czym innym niż *, mamy (strzelam dodatkowe
nawiasowanie):
o += ( l ? e[r++].value : e.charAt(r++))
l oznaczało "e jest tablicą" (od typu 't'?).
tutaj wołaczamy wiec do o to, co ejst pod 'e'
na r-tym miejscu, tylko w zalezności od tego
jakiego typu jest e, różnie się to tej literki
dobieramy. Ot, takie bieda templejty ;-)
Nawet w JS nalezałoby tu raczej zrobić tego ifa
na poczatku lub jakoś inaczej opokować to wyciąganie.
Ostatecznie strzelałbym, że to znaczy(to nie JS:)
if ("+"== s.charAt(n))
o += i.charAt(n);
else if ('*' ~= a.charAt(n) )
o+ = (l ? e[r++].value : e.charAt(r++) );
A, drobna uwaga, nie znam JS ;-)
pzdr
bartekltg
Następne wpisy z tego wątku
- 27.03.17 22:39 Andyy
- 27.03.17 22:52 bartekltg
- 28.03.17 01:33 bartekltg
- 28.03.17 09:58 Roman Tyczka
- 28.03.17 12:04 bartekltg
- 28.03.17 16:56 Roman Tyczka
Najnowsze wątki z tej grupy
- Arch. Prog. Nieuprzywilejowanych w pełnej wer. na nowej s. WWW energokod.pl
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
Najnowsze wątki
- 2025-01-04 13. Raport Totaliztyczny: Powszechna Deklaracja Praw Człowieka Nie Chroni Przed Wyzyskiem Ani Przed Eksploatacją
- 2025-01-04 Zbieranie danych przez www
- 2025-01-04 reverse engineering i dodawanie elementów do istniejących zamkniętych produktów- legalne?
- 2025-01-04 w Nowym Roku 2025r
- 2025-01-04 Warszawa => Specjalista ds. IT - II Linia Wsparcia <=
- 2025-01-04 Warszawa => Java Developer <=
- 2025-01-04 Warszawa => Spedytor Międzynarodowy <=
- 2025-01-04 Warszawa => System Architect (Java background) <=
- 2025-01-04 Wrocław => Application Security Engineer <=
- 2025-01-04 Chrzanów => Specjalista ds. public relations <=
- 2025-01-04 Katowice => Key Account Manager (ERP) <=
- 2025-01-03 Problem z odczytem karty CF
- 2025-01-03 Jazda z Warszawy do Krakowa teslą
- 2025-01-03 Wrocław => Konsultant Wdrożeniowy Comarch XL/Optima (Księgowość i
- 2025-01-03 Warszawa => International Freight Forwarder <=