Explanation: it’s mostly due to how js does type conversion. for the Ls, it’s

[] is an empty array ![] is treated as false combining a boolean with the empty array returns “false” as a string (so true + [] = “true”, false + [] = “false”) ! + [] is treated as true ! + [] + ! + [] is treated as 2 since true + true = 1 + 1 = 2 so you have “false”[2], which is l for the o it’s [] is an empty array [] + {} returns “[object Object]” as a string ({} + [] returns 0) ![] is false !![] is true +!![] casts it to an integer so that part is “[object Object]”[1], which returns “o”

  • Deebster@lemmyrs.org
    link
    fedilink
    English
    arrow-up
    38
    arrow-down
    1
    ·
    edit-2
    1 year ago

    The line breaks haven’t worked, here’s it formatted correctly:

    Explanation: it’s mostly due to how js does type conversion.

    For the Ls, it’s:

    • [] is an empty array
    • ![] is treated as false
    • combining a boolean with the empty array returns “false” as a string (so true + [] = “true”, false + [] = “false”)
    • ! + [] is treated as true
    • ! + [] + ! + [] is treated as 2 since true + true = 1 + 1 = 2
    • so you have “false”[2], which is l

    for the o it’s:

    • [] is an empty array
    • [] + {} returns “[object Object]” as a string ({} + [] returns 0)
    • ![] is false
    • !![] is true
    • +!![] casts it to an integer
    • so that part is “[object Object]”[1], which returns “o”-