Esta línea de código evalúa una expresión y luego llama a un método basado en el valor devuelto.
La expresión ('b' + 'a' + + 'a' + 'a')
se compone únicamente de literales de cadena y operadores de suma.
- Literales de cadena "Un literal de cadena es cero o más caracteres encerrados entre comillas simples o dobles".
- El operador de suma (+) "El operador de suma realiza la concatenación de cadenas o la suma numérica".
Una acción implícita tomada es la llamada a ToNumber en una cadena
- ToNumber aplicado al tipo de cadena "ToNumber aplicado a Strings aplica gramática a la cadena de entrada. Si la gramática no puede interpretar la cadena como una expansión de StringNumericLiteral, el resultado de ToNumber es NaN".
El intérprete tiene reglas sobre cómo analizar la expresión, desglosándola en sus componentes de expresiones de mano izquierda y derecha.
Paso 1: 'b' + 'a'
Expresión izquierda: 'b'
Valor izquierdo: 'b'
Operador: + (uno de los lados de la expresión es una cadena, por lo que la concatenación de cadenas)
Expresión correcta: 'a'
Valor correcto: 'a'
Resultado: 'ba'
Paso 2: 'ba' + + 'a'
Expresión izquierda: 'ba'
Valor izquierdo: 'ba'
Operador: + (uno de los lados de la expresión es una cadena, por lo que la concatenación de cadenas)
Expresión derecha: + 'a'
(esto evalúa el valor matemático del carácter 'a' suponiendo que es un número positivo del signo +; el signo menos también habría funcionado aquí indicando un número negativo, lo que da como resultado NaN)
Valor correcto: NaN (debido a que el operador es la concatenación de cadenas, toString se llama a este valor durante la concatenación)
Resultado: 'baNaN'
Paso 3: 'baNaN' + 'a'
Expresión izquierda: 'baNaN'
Valor izquierdo: 'baNaN'
Operador: + (uno de los lados de la expresión es una cadena, por lo que la concatenación de cadenas)
Expresión correcta: 'a'
Valor correcto: 'a'
Resultado: 'baNaNa'
Después de esto, se ha evaluado la expresión de agrupación y se llama a toLowerCase, que nos deja con banana.
+"a"
esNaN
.