Dla "koneserów" to jest bardzo fajne i śmieszne, ale też... miejscami nieprawidłowe.
Na Rubym się nie znam, ale na JavaScripcie tak, bo to moja praca (choć nie twierdzę, że "zrobiłbym to taniej" ;-)).
Przy okazji []+{} autor mówi, że otrzymane [object Object] to jest obiekt. W 2:16 chyba nawet ktoś go pyta, czy to taki stringm, czy to obiekt, a autor mówi "no, that's just an object" -- czyli obiekt.
[] + {} wyjaśniłem powyżej. Dwuargumentowy operator + działa albo jak matematyczne dodawanie, albo jak łączenie stringów. Tu mamy łączenie stringów. Pusta tablica zamieniana jest na pusty string, a obiekt na "[object Object]".
{} + [] wygląda podobnie, ale to coś zupełnie innego. Tu nie ma dwuargumentowego operatora +.
Reguły parsowania JS mówią, że jeśli rozpoczynamy nową instrukcję i mamy tam {}, to jest to... nie literał
@argothiel: Żona się kiedyś na mnie wk$!$iła, bo obudziłem ją o 3 w nocy, bo nie mogłem się przestać z tego śmiać. Próbowałem jej tłumaczyć, ale nie wychodziło, i to jeszcze pogłębiało frustrację.
Przy okazji takiego wykopu można jeszcze zaobserwować ciekawe zjawisko. Jest główna z płomykiem, to chociaż 3/4 nie wie o co chodzi, i tak wykopie żeby nie wyjść na głupszych.
Sam chciałem kiedyś taki eksperyment przeprowadzić, ale dzięki tej prezentacji już nie muszę :)
@Ortaldo_returned: js i ruby mają dziwne zachowanie dla jakiś wyszukanych działań. Na tym filmiku zaprezentowano to tak by bawiło we wspaniałej formie. Każdy język programowania ma jakieś takie śmieszne "możliwości".
@divinuss: Czytam Niebezpiecznika, ale dziś tego nie widziałem; wrzucił to ktoś na fejsa u mnie. Gdybym wiedział, że jest to na Niebezpieczniku to nie wrzucałbym na Wykop, bo stwierdziłbym, że większość widziała. :)
Komentarze (115)
najlepsze
Dla "koneserów" to jest bardzo fajne i śmieszne, ale też... miejscami nieprawidłowe.
Na Rubym się nie znam, ale na JavaScripcie tak, bo to moja praca (choć nie twierdzę, że "zrobiłbym to taniej" ;-)).
Przy okazji []+{} autor mówi, że otrzymane [object Object] to jest obiekt. W 2:16 chyba nawet ktoś go pyta, czy to taki stringm, czy to obiekt, a autor mówi "no, that's just an object" -- czyli obiekt.
Reguły parsowania. Priorytety.
[] + {} wyjaśniłem powyżej. Dwuargumentowy operator + działa albo jak matematyczne dodawanie, albo jak łączenie stringów. Tu mamy łączenie stringów. Pusta tablica zamieniana jest na pusty string, a obiekt na "[object Object]".
{} + [] wygląda podobnie, ale to coś zupełnie innego. Tu nie ma dwuargumentowego operatora +.
Reguły parsowania JS mówią, że jeśli rozpoczynamy nową instrukcję i mamy tam {}, to jest to... nie literał
http://www.codinghorror.com/blog/2012/07/new-programming-jargon.html
Sam chciałem kiedyś taki eksperyment przeprowadzić, ale dzięki tej prezentacji już nie muszę :)
faila na przykład zaliczył koleś który się zaśmiał przy 16 przecinkach (btw - przecinków wyjdzie 15) ;)
(!(![]) + !"") + 1
A później wkleić je sobie do REPL-a node'a :)
Komentarz usunięty przez moderatora
/System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Resources/jsc