Por que (!+[]+[]+![]).length retorna 9 em JavaScript?

Em JavaScript, o operador “+” é utilizado tanto para soma de números quanto para concatenação de strings. Quando você utiliza o operador “+” para juntar um valor booleano com uma string vazia, o JavaScript automaticamente converte o valor booleano para uma string.

Vamos analisar a expressão passo a passo:

  1. Primeiro, temos a expressão dentro dos parênteses: ! + + + !
  2. O operador “!” é o operador de negação lógica, então ! + vai negar/verter o valor booleano de uma array vazia.
  3. No JavaScript, uma array é considerada verdadeira, então, ao negar uma array vazia, obtemos um valor booleano false.
  4. Agora, nós temos false + + + false.
  5. O operador “+” é utilizado para concatenar strings ou somar números, e quando utilizado com um valor booleano e uma string, ele irá converter o valor booleano para uma string.
  6. No caso de um valor booleano false, ele será convertido para a string “false”.
  7. Então, temos “false” + + + “false”.
  8. Agora, quando utilizamos o operador “+” com uma string e uma array vazia, o JavaScript também converte a array vazia para uma string, resultando em uma string vazia.
  9. Assim, temos “false” + "" + "" + “false”.
  10. Por fim, quando somamos as quatro strings, a concatenação ocorre, resultando em “falsefalsefalsefalse”.
  11. Agora, quando chamamos .length na string resultante, obtemos o número de caracteres na string, que é 9.

Portanto, o resultado final é 9.