Ten wiersz kodu ocenia wyrażenie, a następnie wywołuje metodę na podstawie zwróconej wartości.
Wyrażenie ('b' + 'a' + + 'a' + 'a')
składa się wyłącznie z literałów łańcuchowych i operatorów dodawania.
- Literały łańcuchowe „Literał łańcuchowy to zero lub więcej znaków ujętych w pojedyncze lub podwójne cudzysłowy”.
- Operator dodawania (+) „Operator dodawania dokonuje konkatenacji łańcucha lub dodawania liczbowego”.
Podjęte działanie niejawne to wywołanie ToNumber w ciągu znaków
- ToNumber zastosowany do typu ciągu „ToNumber zastosowany do ciągów stosuje gramatykę do wejściowego ciągu. Jeśli gramatyka nie może interpretować łańcucha jako rozwinięcia StringNumericLiteral, wówczas wynikiem ToNumber jest NaN.”
Interpretator ma zasady dotyczące parsowania wyrażenia, dzieląc je na składniki wyrażeń lewej i prawej ręki.
Krok 1: 'b' + 'a'
Lewe wyrażenie: 'b'
lewa Wartość: „b”
Operator: + (jedna ze stron wyrażenia jest łańcuchem, więc konkatenacja łańcucha)
Właściwe wyrażenie: 'a'
właściwa wartość: „a”
Wynik: 'ba'
Krok 2: 'ba' + + 'a'
Lewe wyrażenie: 'ba'
lewe Wartość: „ba”
Operator: + (jedna ze stron wyrażenia jest łańcuchem, więc konkatenacja łańcucha)
Właściwe wyrażenie: + 'a'
(ocenia wartość matematyczną znaku „a” przy założeniu, że jest to liczba dodatnia ze znaku + - znak minus również by tu działał, wskazując liczbę ujemną - co powoduje, że NaN)
Właściwa wartość: NaN (ponieważ operator jest konkatenacją łańcuchów, wywoływana jest taString dla tej wartości podczas konkatenacji)
Wynik: „baNaN”
Krok 3: 'baNaN' + 'a'
Lewe wyrażenie: 'baNaN'
lewe Wartość: „baNaN”
Operator: + (jedna ze stron wyrażenia jest łańcuchem, więc konkatenacja łańcucha)
Właściwe wyrażenie: 'a'
właściwa wartość: „a”
Wynik: „baNaNa”
Następnie zostało ocenione wyrażenie grupujące i wywoływane jest toLowerCase, co pozostawia nam banana.
+"a"
jestNaN
.