TypeScriptに入門したいのでJavaScriptに入門してみる(nullリテラル~データ型とリテラルの最後まで)

続: JavaScript入門

[これ]({{ relref path=“2019-10-29-javascript-intro.md” }}) の続き。

教材は

https://jsprimer.net/

nullリテラル

null 値を返すリテラルで、「値がない」ことを表す。 nullを参照した場合コンソール上では null と表示されるだけである。

undefined はリテラルではない

undefined はただのグローバル変数で、undefinedという値を持っているだけ。したがって同じ undefined という名前のローカル変数を宣言することができる(もちろん非推奨)

function fn(){
    var undefined = 100;
    console.log(undefined)
}
fn();

true, false, null は変数ではなくリテラルであるため、同じ名前の変数を定義することができない。

オブジェクトリテラル

const obj = {
    key: "value"
};

オブジェクトの keyには 文字列またはSymbol を指定し、値にはプリミティブ型からオブジェクトまで何でも入れることができる。 オブジェクトが持つキーのことをプロパティ名と呼ぶ。※ここでは key がプロパティ名。

オブジェクトのキーを参照するにはドット . またはブラケット [] を利用する。

const obj = {
    "key" : "value"
};

console.log(obj.key);
console.log(obj["key"]);

ドット記法ではプロパティ名が変数名と同じく識別子である必要があるので、数値から始まるような識別子は利用できない。

配列リテラル

const emptyArray = []; // 空配列
const array = [1, 2, 3];

配列の添字は 0 から始まる。他の言語と同じ。

正規表現リテラル

JavaScriptは正規表現をリテラルで書ける。正規表現リテラルはスラッシュ / で囲まれた正規表現のパターン文字列で表される。

プリミティブ型とオブジェクト

プリミティブ型は基本的にリテラルで表現するが、真偽値(Boolean)、数値(Number)、文字列(String)はそれぞれオブジェクトとして表現することもできる。 ラッパーオブジェクトという。 ラッパーオブジェクトは length などのプロパティを持つ。

const str = new String("文字列"); // 文字列をラップしたString ラッパーオブジェクト
console.log(typeof str); // "object"
console.log(str.length); // 3

しかし明示的にラッパーオブジェクトを使う理由がない。プリミティブ型のデータに対してもオブジェクトのように length プロパティを参照することができるため。

const str = "文字列";
console.log(typeof str); // "string"
console.log(str.length); // 3

プリミティブ型のデータのプロパティにアクセスする際に、対応するラッパーオブジェクトに暗黙的に変換してからプロパティにアクセスするため。 ラッパーオブジェクトを明示的に書くのは冗長なので、プリミティブ型のデータを表現が推奨される。