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:
- Primeiro, temos a expressão dentro dos parênteses: ! + + + !
- O operador “!” é o operador de negação lógica, então ! + vai negar/verter o valor booleano de uma array vazia.
- No JavaScript, uma array é considerada verdadeira, então, ao negar uma array vazia, obtemos um valor booleano false.
- Agora, nós temos false + + + false.
- 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.
- No caso de um valor booleano false, ele será convertido para a string “false”.
- Então, temos “false” + + + “false”.
- 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.
- Assim, temos “false” + "" + "" + “false”.
- Por fim, quando somamos as quatro strings, a concatenação ocorre, resultando em “falsefalsefalsefalse”.
- Agora, quando chamamos .length na string resultante, obtemos o número de caracteres na string, que é 9.
Portanto, o resultado final é 9.