JavaScriptを読んでいると、「あれ、、、なにこれ?この書き方。。。」と思うことがたまにあります。この際の厄介なことは、どうやって調べたらいいかわからないことです。Google先生に聞こうにも、その書き方をなんと呼ぶかわからないので聞けない。
そんな「なにこれ?」を厳選してみました。覚えておくと、将来スッキリとする時が来るでしょう。
1. なみなみ、ふにゃふにゃ言ってる
var arg = ~~~~~~~~~~~1^1|1&1<<1>>1>>>1
ビット演算子を使うと、JavaScriptでなみなみ、ふにゃふにゃ言えます。上記は-1です。
2. アンダーバーアンダーバー、ダラーダラー言ってる。
var __$$_$$$_$$_$$_peso = "だらーだらー";
JavaScriptでは、変数名に文字と数字、Unicode文字、それに_と$を使うことができます。
つまり、アンダーバーやダラーが出てきても、それは単なる文字と一緒です。特に意味はありませんが、目立つので、(多分それが理由で)JQueryではJQueryオブジェクトのエイリアスに$を使っています。
3. 大カッコ、中カッコ
{}
[]
オブジェクトの生成が{}、配列の生成が[]です。上記コードは下記と同じ意味です。
new Object();
new Array();
4. かっこかっこ言ってる。
execFunc()();
JavaScriptでは、関数で関数を返すことができます。どう説明すればよいかわからないので、サンプルコードを示します。
function execFunc(){
return function(){
console.log("do");
}
}
上記は関数を返す関数で、execFunc()で、実行可能な関数が生成され、その直後に()をつけることによって生成された関数を実行するというものです。
5. 見慣れぬコロン
JavaScriptでコロンが出てくるパターンは3項演算子とラベルとオブジェクトリテラル(くらい?)です。その中でも、三項演算子とラベルはいきなり出てくるとびっくりするので選出です。
var arg = 条件 ? true : false;
test: while(true){
break test;
}
ラベルは、JavaScriptではループ文の前につけてそのループをbreakしたりcontinueしたりするのに使えます。ループ分以外の式にもラベルをつけることもできます。
6. いきなりスラッシュ(/)
var regexp = /test/i
""や''で囲われているのは文字列ですが、//で囲まれているのは見慣れませんね。//で囲まれたのは正規表現で、RegExpオブジェクトが生成されます。上のコードは下記コードと同じ意味です。
var regexp = new RegExp("test", "i");
7. 唐突に単独のバックスラッシュ
var message = "JavaScriptでは\
文字列の最終行に\\をつけることで\
複数行の文字列を定義することが\
できてしまうのです。\
";
8. function前の変な記号
functionの前に特定の記号をつけることにより即時実行関数を定義することができます。即時実行関数とは、スコープを限定的にするために用いる記法で、以下の表現が代表的です。
(function(){console.log("do")})();
()で囲み、その後に実行のための()をつけることで定義した関数を即時に実行できます。この記法は有名なのですが、実は()で囲わなくても最初に!や+や-や~の記号をつけることで即時関数として実行できます。
!function(){console.log("do")}();
+function(){console.log("do")}();
-function(){console.log("do")}();
~function(){console.log("do")}();
ちなみに、functionの前に何も付けないと文法エラーとなります。
function(){console.log("do")}();