ぼちぼちあしあと

プログラム初心者の備忘録です。

インクリメントについて

かなりネタ切れ感があるがインクリメントについて。

ここからしばらく単発ネタが増えると思います。悪しからず。

後置インクリメントの場合

let i = 3;
console.log(i++);  // iを返却してから+1する
console.log(i);

出力

3

4

前置インクリメントの場合

i = 3;
console.log(++i);  // iを+1してから返却する
console.log(i);

出力

4

5

1以外のインクリメントの省略形

i = 3;
i += 2;  // i = i + 2と同義
console.log(i);

出力

5

for-in文について

for-in文の使い方について。

これを使えばオブジェクトの要素を一通り取り出せる。

const kansai = {
    O : "Osaka",
    H : "Hyogo",
    K : "Kyoto",
    S : "Shiga",
    N : "Nara",
    W : "Wakayama"
}

for (const i in kansai){  // iはキーを表す変数
    console.log(i + "が表す都道府県は" + kansai[i] + "です");  // オブジェクト名[キーを表す変数]でプロパティの値を返す
}

出力

Oが表す都道府県はOsakaです

Hが表す都道府県はHyogoです

Kが表す都道府県はKyotoです

Sが表す都道府県はShigaです

Nが表す都道府県はNaraです

Wが表す都道府県はWakayamaです

オブジェクト名[キーを表す変数]が配列[インデックス]と似ている。

配列もオブジェクトの一種なので、for-in文を用いることができる。

const language = ["javascript", "python", "c++"];
for (const i in language){  // iはキーを表す変数名
    console.log("languageには" + i + "番目の要素として" + language[i] + "が含まれています")
}

出力例

languageには0番目の要素としてjavascriptが含まれています

languageには1番目の要素としてpythonが含まれています

languageには2番目の要素としてc++が含まれています

'for (const キーを表す変数 in オブジェクト名)'と'for (const 要素を表す変数 of 配列名)'がややこしい〜

for-of文の使い方

for-of文の使い方について。

これを使えば配列の要素を一通り取り出せる。

const language = ["javascript", "python", "c++"];
for (const i of language){  // iは要素を表す変数名
    // '配列名.indexOf(要素)' は要素のインデックスを返す関数
    console.log("languageには" + language.indexOf(i) + "番目の要素として" + i + "が含まれています");
}

出力

languageには0番目の要素としてjavascriptが含まれています

languageには1番目の要素としてpythonが含まれています

languageには2番目の要素としてc++が含まれています

配列はイテレータだからfor-of文が使えるとのこと。

イテレータとはなんぞやという感じだが、今の理解では、順番に要素を取り出せるオブジェクトのことらしい。

間違っていたら教えていただけると助かります。

メソッドについて

メソッドについて紹介する。

メソッドとはオブジェクトにおいて値に代わって定義された無名関数のこと。

以下にメソッドの例を書く。

const salary = {
    person1 : function() {
        return (Math.floor(Math.random() * 10) + 1) * 1000;
    },
    person2 : function() {
        return (Math.floor(Math.random() * 10) + 1) * 1000;
    },
    person3 : function() {
        return (Math.floor(Math.random() * 10) + 1) * 1000;
    }
}

console.log("person1の給料は" + salary.person1() + "ドルです");  // 文字列 + 数値 は文字列扱いとなる
console.log("person2の給料は" + salary.person2() + "ドルです");
console.log("person3の給料は" + salary.person3() + "ドルです");

出力例

person1の給料は5000ドルです

person2の給料は3000ドルです

person3の給料は4000ドルです

言うまでもないかもしれないが、人生ゲームのフリーターの給料を参考にした。

メソッドという言葉の本来の意味からjavascriptにおけるメソッドを連想するのは非常に困難だと思うのは僕だけか?

オブジェクトの定義と呼び出しについて

まだまだオブジェクトと呼ばれるものについての理解が浅いのだが、備忘録として書いておく。

const 変数名 = { // この{}で挟まれた部分がオブジェクト

プロパティ名1 : 値1,

プロパティ名2 : 値2,

プロパティ名3 : 値3

}

でオブジェクトを定義できる。それと、プロパティ名のことをキーとも言うらしい。

試しにオブジェクトを定義してみよう。

const kansai = {
    O : "Osaka",
    H : "Hyogo",
    K : "Kyoto",
    S : "Shiga",
    N : "Nara",
    W : "Wakayama"
}

ちなみにこれは人口の多い順。

:を=にしないこと(=にすると、SyntaxError: Invalid shorthand property initializerがスローされた)や,で区切ることに注意する。

オブジェクトの値を呼び出すときは変数名.プロパティ名で呼び出せる。

例えば、

console.log(kansai.O);

Osaka

となる。

巻き上げについて

結局、巻き上げについて記事にしてしまった・・・。

せえへんのかなあと思ったらすんのかい!

変数の初期値設定は以下のように書けることは以前に紹介した。

var seisuu = 10;

var(やlet)の場合、初期値設定は、以下のように2行に分けて書くことができる。

var seisuu;  // 宣言
seisuu = 10;  // 代入

まどろっこしいが、実際こう書ける。

ここで、

seisuu = 10;
console.log(seisuu);
var seisuu;

というコードを書いたとする。(なんでそう書いたのかはここでは触れない)

すると10が出力されるではないか!

これがいわゆる巻き上げである。

定義式(ここではvar seisuu;)は上で書こうが下で書こうが、同じ挙動を示すのだ。

では、次のコードを書いた場合はどうなるか?

console.log(seisuu);
var seisuu;
seisuu = 10;

これはErrorにならず、出力はundefinedとなる。

定義式のみ巻き上げが起こるからだ。

(代入式は巻き上げが起こらない。だってもし起こったら代入が実質1回しかできないことになるでしょ!)

この巻き上げ、varで変数を定義した時のみ起こる。letやconstでは起きない。これもvarとletとconstの違うところである。

seisuu = 10;
console.log(seisuu);  // ReferenceError: Cannot access 'seisuu' before initializationになる
let seisuu;

念押しに一つ。

console.log(seisuu);
var seisuu = 10;

となるとどうなるか?

くどいが、定義式のみ巻き上げられるので(代入式は巻き上げられず)、undefinedになる。

余談 constを2行に分けて書こうとすると、

SyntaxError: Missing initializer in const declaration

となっちゃう。

さまざまな関数 -引数なし戻り値なし-

今回は、引数も戻り値もない場合について。

function hello(){
    console.log("Hello JavaScript!");
}
hello();

出力

Hello JavaScript!

戻り値がないということは、関数内でメッセージを出力するケースが多いんだろうか?