なんでNode.jsの記事なのにJavaScriptの基礎から説明するの?って思うかもしれない。
恐らく多くの人が同じように疑問を持っていることだろう。
だがしかし!!そんなどうでもいい疑問は犬が食えばいい。俺はそんな面倒くさい質問に答えたくない。
多くのブログが、『こうやったらこうなった』しか書かない、ただのノイズ記事ばっかりなことに対し、俺は『こうやったらこうなったのはこうだから』までは書きたいと思ってる。
そして『そもそも何のためにそんなことするの?』ってのも、ある程度、そう、示唆する段階でいいので、念の為に書いておきたいとは思ってる。当然そこには基礎が含まれるわけだ。
というわけで、面倒くさいけど答えてみた。
もういいよ、行ってみよう。
配列に関して
配列っていうと、反復させながら1個ずつ取り出して処理できるようなイメージがあるけど、そのイメージで正しい。
var myList = ['8', '16', '32', '64', '128']; var myArr = new Array('First', 'Second', 'Third', 'Forth', 'Fifth'); var myHash = { 'vendor': 'HP', 'type': 'ENVY-810', 'OS': 'Windows 8.1', 'CPU': 'core i7 4790', 'Memory': '16GB' };こんなコードを書いておいてみる。
ちなみに3つともObjectだ。
console.log(typeof(myList)); console.log(typeof(myArr)); console.log(typeof(myHash));
そして反復処理で取り出してみよう。
for(var datum in myList) { console.log(myList[datum]); } for(var datum in myArr) { console.log(myArr[datum]); } for(var datum in myHash) { console.log(myHash[datum]); }見事に全部取り出せている。
見た目わかりやすいように改行を入れてるので、実際には空白行は表示されないよ。
そうそう、myHashは連想配列なので、値だけではなくキーも表示させたいだろうね。
そういう時は普通に表示させてしまえばいい。
for(var datum in myHash) { console.log(datum + ':' + myHash[datum]); }当然myHashはキーを持つので、インデックスを持ってない。つまり、インデックス値で中身を見れない。
for(var i=0; i<myHash.length; i++) { console.log(myHash[i]); };
なにも表示されない。まぁ、当たり前っちゃ当たり前。
myListとmyArrは配列オブジェクトでインデックス値を持ってる。だから表示される。
for(var i=0; i<myList.length; i++) { console.log(myList[i]); }; for(var i=0; i<myArr.length; i++) { console.log(myArr[i]); };
ほらこの通り。
なんだかよくわからないって思ったら、最初にfor inで組んでみて、ダメだったらforのカウント式でやるといいんじゃないの?
ぶっちゃけ、君の好きにすればいいよ。ルールなんかその場で作っちまえば良い。
Githubとかのプルリクエストのコメントで、重箱の隅突っつくのが大好きなクソドM野郎(理系)にいちいち細かい事いわれたら、『知るかボケ!』って言いながら、そいつの髪の毛掴んでむしりまくるといいよ。
恐らく二度とコメントしなくなると思うので大丈夫だ。メラゾーマ!とか言いながらやると効果的。
魔法もいいけど物理攻撃も大事!!!
関数とオブジェクト
関数ってのはあれだよね、みんなよく使ってる、function hoge() {} みたいな構文。
オブジェクトってのは前回説明したように、var hoge = {} みたいな構文ね。
function Hoge() { console.log('This is Hoge'); } var Fuga = { myFunc: function() { console.log('This is Fuga.myFunc'); } };typeof()関数で型を見てみよう。
console.log(typeof(Hoge)); console.log(typeof(Fuga));
そう、最初のHogeは関数だ。関数だからコンストラクタになってる。コンストラクタってなに?って言われたら、俺はこう答えるだろう。
生成時、勝手に実行されやがるドMな奴
つまりこの場合、勝手に無許可に無断で無節操に『This is Hoge』とコンソールに表示されるってことだ。
逆にオブジェクトリテラルなFugaは、Fugaオブジェクト内のmyFuncを明示的に呼び出さないと実行されないってこと。頑固なドS野郎だ。
さて、関数リテラルの方を試してみよう。
function Hoge() { console.log('This is Hoge'); } var myHOge = new Hoge(); // ←追記
実行してみるとほらこの通り、
勝手に無許可に無断で無節操な感じに実行されやがる、まっことドMなクソ野郎でありますぞ!!
いや別に関数リテラルに文句があるわけじゃないんだけど、なんとなくそう思っただけなんで許されよ。いらぬ詮索はせぬように!!!!
そしてオブジェクトリテラルはオブジェクトなので、関数はメソッドとして扱わないと実行出来ない。つまりメソッド名を指定して実行されるんだ。ハッ!フッ!!ホッ!!!
var Fuga = { myFunc: function() { console.log('This is Fuga.myFunc'); } }; Fuga.myFunc(); // ←追記
実行してみるとほらこの通り、
名指しで指名しないと実行されないとう、男らしさ満点の頑固な昭和のドS野郎だ。
いや別にオブジェクトリテラルを推しまくってるわけじゃないんだけど、なんとなくそう思っただけなんで許されよ。いらぬ詮索はせぬように!!!!
またしても長くなった
長くなったYO!!!続きは次回にする。
facebook
twitter
google+
fb share