【JS】('b' + 'a' + + 'a' + 'a').toLowerCase()の出力は「banana」

こちらが元ネタです
記事内でもなぜbananaになるのかについて、いくつかの回答が来ているのですが、
私なりにまとめてみます

stackoverflow.com

はじめに

('b' + 'a' + + 'a' + 'a').toLowerCase()を実際に実行してみます

f:id:taberu_salad:20190902185740p:plain

確かに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が出力されたというわけです

f:id:taberu_salad:20190902185745p:plain

まとめると

改めて、全体をみてみましょう

('b' + 'a' + + 'a' + 'a').toLowerCase()

+ 'a'の部分はNaNとなるので、

('b' + 'a' + 'NaN' + 'a').toLowerCase()

つまり、

('baNaNa').toLowerCase()

ということは、

banana

となりますね

タイトルとURLをコピーしました