Цей рядок коду оцінює вираз, а потім викликає метод на основі повернутого значення.
Вираз ('b' + 'a' + + 'a' + 'a')
складається виключно з рядкових літералів та операторів додавання.
Неявна дія, що вживається, - це виклик ToNumber на рядку
- ToNumber, застосований до типу рядка "ToNumber, застосований до Strings, застосовує граматику до вхідної String. Якщо граматика не може інтерпретувати String як розширення StringNumericLiteral, то результатом ToNumber є NaN."
У перекладача є правила, як розбирати вираз, розбиваючи його на складові виразів лівої та правої руки.
Крок 1: 'b' + 'a'
Лівий вираз: 'b'
ліве значення: 'b'
Оператор: + (одна із сторін виразу - рядок, тому з'єднання рядків)
Правий вираз: 'a'
правильне значення: 'a'
Результат: 'ba'
Крок 2: 'ba' + + 'a'
Вираз ліворуч: 'ba'
ліве значення: 'ba'
Оператор: + (одна із сторін виразу - рядок, тому з'єднання рядків)
Правий вираз: + 'a'
(це оцінює значення математики символу 'a', припускаючи, що це додатне число від знаку + - знак мінус також працював би тут, вказуючи негативне число - що призводить до NaN)
Правильне значення: NaN (оскільки оператор є об'єднанням рядків, toString викликається цим значенням під час конкатенації)
Результат: 'baNaN'
Крок 3: 'baNaN' + 'a'
Вираз ліворуч: 'baNaN'
ліве значення: 'baNaN'
Оператор: + (одна із сторін виразу - рядок, тому з'єднання рядків)
Правий вираз: 'a'
правильне значення: 'a'
Результат: 'baNaNa'
Після цього оцінюється вираз групування, і називається toLowerCase, який залишає нас з бананом.
+"a"
єNaN
.