こちらが元ネタです
記事内でもなぜ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
となりますね