akurat na końcu dostajemy stringa w postaci '10' (jak autor znaleziska dobrze zauważył) ale nie szkodzi bo gdyby całość umieścić w +[x] to z powrotem byłaby liczba.
Całość łamigłówki opiera się właśnie na dziwacznych operacjach (jak dodawanie liczby do pustej tablicy) i związanym z tym automatycznym rzutowaniem typów
W odpowiedzi na pytanie zawarte w tytule wykopu: Ponieważ projektanci JavaScript stwierdzili, że świetnym pomysłem jest użycie operatora "+" do dodawania liczb ORAZ łączenia ciągów znaków. Nie wiem w jaki sposób te dwe operacje można nazwać tak samo. Łączenie ciągów znaków to konkatenacja, a nie dodawanie.
@kazikcz: Tak cecha języka, w JavaScripcie są większe problemy niż ten. Pisząc skrypty jestem świadom działania mechanizmu przymusowej zmiany typu. Tym, co jeszcze się gubią w JavaScripcie i wpadają w takie pułapki, polecam JSLint. W instrukcjach Douglas Crockford wypisał różne błędy projektowe i pułapki językowe oraz jak sobie z nimi radzić.
Może po prostu na skutek błędu dodaje do siebie bity/bajty z których są "zrobione" te nawiasy kwadratowe, znaczy traktuje je tak samo jak cyfry?
Należy pamiętać że dla kompa istnieje jedynie coś takiego jak bit=wartość 0/1, nie istnieje zasadniczo coś takiego jak litery czy cyferki dla kompów, żadnych.
Jak dlugo trzeba byc odciety od swiata zeby wpasc na taki chory pomysl z nawiasami i plusami? Jak ludzie cos wymslaja to przewaznie z lenistwa i dla ulatwienia sobie zycia ale zeby cos takiego?
@thund3rb0lt: Jeszcze jest coś takiego, powoli zanikającego jak ciekawość. Jak ktoś dużo programuje to prędzej czy później trafi na coś ciekawego i wtedy pojawia się myśl: "a co się stanie, jak zrobię tak..."
@Mephistofeles: Ale jakich hacków? To są zwykle elementy języka które zostały wprowadzone w bardzo konkretnym celu a ktoś je wykorzystał w nietypowy sposób. To, że operator + zmienia coś w liczbę to efekt tego, że w JS
Komentarze (79)
najlepsze
akurat na końcu dostajemy stringa w postaci '10' (jak autor znaleziska dobrze zauważył) ale nie szkodzi bo gdyby całość umieścić w +[x] to z powrotem byłaby liczba.
Całość łamigłówki opiera się właśnie na dziwacznych operacjach (jak dodawanie liczby do pustej tablicy) i związanym z tym automatycznym rzutowaniem typów
Należy pamiętać że dla kompa istnieje jedynie coś takiego jak bit=wartość 0/1, nie istnieje zasadniczo coś takiego jak litery czy cyferki dla kompów, żadnych.
wszystko jest dokładnie wytłumaczone w specyfikacji tego języka
@Mephistofeles: Ale jakich hacków? To są zwykle elementy języka które zostały wprowadzone w bardzo konkretnym celu a ktoś je wykorzystał w nietypowy sposób. To, że operator + zmienia coś w liczbę to efekt tego, że w JS
[+[]]+[++[[]][+[]]]+[++[[]][+[]]]+[+[]]+[+[]]+[+[]]+[++[[]][+[]]]+[+[]]+[+[]]
+[++[[]][+[]]]+[++[[]][+[]]]+[++[[]][+[]]]+[+[]]+[+[]]+[++[[]][+[]]]+[+[]]
+[+[]]+[++[[]][+[]]]+[++[[]][+[]]]+[+[]]+[+[]]+[+[]]+[+[]]+[++[[]][+[]]]
+[+[]]+[++[[]][+[]]]+[++[[]][+[]]]+[+[]]+[++[[]][+[]]]+[+[]]+[+[]]
+[++[[]][+[]]]+[+[]]+[++[[]][+[]]]+[++[[]][+[]]]+[+[]]+[++[[]][+[]]]
+[++[[]][+[]]]+[++[[]][+[]]]+[+[]]+[+[]]+[+[]]+[++[[]][+[]]]+[+[]]+[+[]]
+[+[]]+[+[]]+[+[]]+[+[]]+[++[[]][+[]]]+[++[[]][+[]]]+[+[]]+[+[]]
+[++[[]][+[]]]+[++[[]][+[]]]+[+[]]+[+[]]+[++[[]][+[]]]+[++[[]][+[]]]
+[++[[]][+[]]]+[+[]]+[++[[]][+[]]]+[+[]]+[++[[]][+[]]]+[+[]]+[++[[]][+[]]]
+[++[[]][+[]]]+[+[]]+[+[]]+[+[]]+[++[[]][+[]]]+[++[[]][+[]]]+[+[]]
+[++[[]][+[]]]+[++[[]][+[]]]+[+[]]+[++[[]][+[]]]+[+[]]+[++[[]][+[]]]
+[++[[]][+[]]]