こちらが元ネタです
記事内でもなぜbananaになるのかについて、いくつかの回答が来ているのですが、
私なりにまとめてみます
はじめに
('b' + 'a' + + 'a' + 'a').toLowerCase()を実際に実行してみます

確かにbananaと出力されます
鍵となるのは、+ + 'a'の部分
.toLowerCase()は文字列を小文字に直すメソッドですので、問題ないかと思います
問題なのは、カッコの中身です
('b' + 'a' + + 'a' + 'a')
どうやら+ が何かしてるんだろうという推測はつきますね
少し色をつけてみます
(‘b’ + ‘a’ + + ‘a’ + ‘a’)
3項目に+ 'a'なるものがあります
+ 'a'の+は単項演算子
そもそも単項演算子とは何でしょう
ウィキペディアには次のように書かれています
単項演算とは、数学で、被作用子が一つだけであるような演算のこと。
…具体的にいきましょう
-9(マイナス9) ← この ” - ” は単項演算子です
これを負の単項演算というらしいです
同様に、
+9(プラス9) ← この ” + ” は単項演算子です
これを正の単項演算というらしいです
+ 'a'は、Not A Number
つまり、+ 'a'(プラス'a')を表そうとした時に、'a'は数字ではないので、
Not A Number、つまりNaNが出力されたというわけです

まとめると
改めて、全体をみてみましょう
('b' + 'a' + + 'a' + 'a').toLowerCase()
+ 'a'の部分はNaNとなるので、
('b' + 'a' + 'NaN' + 'a').toLowerCase()
つまり、
('baNaNa').toLowerCase()
ということは、
banana
となりますね


