Essa linha de código avalia uma expressão e chama um método com base no valor retornado.
A expressão ('b' + 'a' + + 'a' + 'a')
é composta exclusivamente de literais de string e operadores de adição.
- Literais de sequência "Um literal de sequência é zero ou mais caracteres entre aspas simples ou duplas."
- O operador Addition (+) "O operador de adição executa concatenação de cadeias ou adição numérica".
Uma ação implícita tomada é a chamada para ToNumber em uma sequência
- ToNumber Aplicado ao Tipo de String "ToNumber aplicado a Strings aplica gramática à String de entrada. Se a gramática não puder interpretar a String como uma expansão de StringNumericLiteral, o resultado de ToNumber será NaN."
O intérprete possui regras de como analisar a expressão, dividindo-a em seus componentes de expressões da mão esquerda e direita.
Passo 1: 'b' + 'a'
Expressão à esquerda: 'b'
Valor à esquerda: 'b'
Operador: + (um dos lados da expressão é uma string, portanto, concatenação de string)
Expressão correta: 'a'
Valor correto: 'a'
Resultado: 'ba'
Passo 2: 'ba' + + 'a'
Expressão à esquerda: 'ba'
Valor à esquerda: 'ba'
Operador: + (um dos lados da expressão é uma string, portanto, concatenação de string)
Expressão direita: + 'a'
(este avalia o valor de matemática do caráter 'a' supondo que é um número positivo a partir do sinal de + - o sinal de menos teria também trabalhou aqui, indicando um número negativo - o que resulta em NaN)
Valor direita: NaN (porque o operador é concatenação de cadeias, toString é chamado nesse valor durante a concatenação)
Resultado: 'baNaN'
Etapa 3: 'baNaN' + 'a'
Expressão à esquerda: 'baNaN'
Valor à esquerda: 'baNaN'
Operador: + (um dos lados da expressão é uma string, portanto, concatenação de string)
Expressão correta: 'a'
Valor correto: 'a'
Resultado: 'baNaNa'
Depois disso, a expressão de agrupamento foi avaliada e toLowerCase é chamado, o que nos deixa com banana.
+"a"
éNaN
.