はじめに
Xで以下のようなポストを見かけました。
JavaScriptの学習中だったので原因を突き止めてやろうと意気込んで検証し始めたのは良いものの、
(案の定、) 時間を無駄に使ってしまう結果に終わりました。
そのせめてもの供養に、記録に残そうと記事にしました。
この記事はJavaScript初心者が仮説思考も行わず無様に試行錯誤を行っただけのものです。
検証
ポストされていたのはこのようなコードです。
console.log(('b' + 'a' + + 'a' + 'a').toLowerCase());
// banana
これを、PHPのマジカルインクリメントのような機能が働いているのかと3つ目の'a'
を変えてみたり、
console.log(('b' + 'a' + + 'b' + 'a').toLowerCase());
// banana
なんとなく+
の間のスペースを取り除いてみたりしましたが、
console.log(('b' + 'a' ++ 'a' + 'a').toLowerCase());
// SyntaxError
ヒントになるようなものは得られず、
結局適当に文字列を変えてみてようやくNaN
が関係していることに気づきました。
console.log(('b' + 'b' + + 'b' + 'b').toLowerCase());
// bbnanb
console.log(+ 'b');
// NaN
結果
+
演算子には加算だけでなく、オペランドが数値以外の場合は数値に変換する、単項プラス演算子としての役割があるそうです。
つまり、ポストのコードは以下のものと同義のようです。
console.log(('b' + 'a' + NaN + 'a').toLowerCase());
// banana
おわりに
なぜtoLowerCase()
を使っているのかということから仮説を立てていけば、
少なくともNaNが関係していることまではすぐにたどり着けていた気がします。
今後はプログラミング学習のスピードと質を上げるためにも、より仮説思考を意識しながら学習を進めていこうと思います。