JS je snad este horsie ako PHP rubrika: Programování: JavaScript
((!+[]+!![]+!![]+!![]+!![]+[])+(+[])) JS je este horsi ako PHP ked z tohoto vypocita 50!! resp. string "50" ! = false (teda 0) !! = true (teda 1) [] je pole, takze to je asi 0 takze po prepisani to je: ((0+0+1+0+1+0+1+0+1+0+0)+(+0)) co je ((5) + ("0")) a teda vysledok je 50 .... <code> nejake rozumne "prelozenie" toho kusku kodu do ineho "normalneho" jazyka - ale programovo?
"Horší" je dost subjektivní. Skoro každej jazyk má svoje. Jasně, ten kód je nečitelnej a hnusnej, ale co je za problém, na takovej kód v reálu nenarazíte a kdyby jo, tak utečte :D. Postupně si ten vyraz projeďte v nějaký konzoli.
"! = false (teda 0)"
! neni false, je to negace toho výrazu za tím, jde o unární operátor, má přednost před binárním a při přičítání se true chová jako 1 a false jako 0
"[] je pole, takze to je asi 0"
Pole samo o sobě je pole. +[] je 0, protože jde o unární plus, takže dojde k přetypování na číslo viz Unary Plus na MDN
Něco jinýho je binární plus. Přičítat pole k číslu "nejde", takže JS provede coercion (přetypuje to na "něco" kompatibilního s tím druhým expression). Pole je typ Array a má metodu toString, takže dojde k přetypování na řetězec zavoláním tý metody toString. A když se "sčítá" číslo a řetězec, vyleze z toho řetězec.
Jinýmy slovy.
(!+[] + !![] + !![] + !![] + !![] + []) + (+[])
(!Number([]) + Boolean([]) + Boolean([]) + Boolean([]) + Boolean([]) + (new Array).toString()) + Number([])
!0 + 1 + 1 + 1 + 1 + "" + 0
1 + 1 + 1 + 1 + 1 + "" + 0
5 + "" + 0
"5" + 0
"50"
Všechno je pořád JS
Pro zobrazení všech 11 odpovědí se prosím přihlaste:
Nebo se přihlaste jménem a heslem:
Komentáře