2.1 変数は参照
JavaScriptでは変数はオブジェクトの参照を表し、変数そのものではないんだよ。つまり、JavaScriptで変数を作成すると、単にメモリ内のオブジェクトへの参照を作成するだけなんだ。
この言語の特徴は変数を扱う際、特にオブジェクトを関数に渡したり、他の変数に代入したりするときに重要な影響を与えるよ。
変数を作成して値を代入すると、JavaScriptはその値のためにメモリ内にオブジェクトを確保し、変数をそのオブジェクトへの参照にするんだ。一つの変数を別の変数に代入すると、新しい変数は元の変数と同じオブジェクトを指すことになる。つまり、もしオブジェクトが可変であれば、一つの変数を通じて行われた変更はもう一つの変数にも反映されるんだ。
例:
let a = [1, 2, 3];
let b = a;
b.push(4);
console.log(a); // 出力されるのは: [1, 2, 3, 4]
変数 b
に4を追加したけど、その結果は変数 a
のリストにも追加されたんだ。なぜなら、実際にはどちらの変数もリストオブジェクト [1, 2, 3]
への参照に過ぎないからなんだ。
2.2 undefined型
JavaScriptには2つの特別なデータ型があるよ: null
と undefined
。これらの型は類似しているため、開発者にとっては時に混乱を招くけど、それぞれ異なる目的があって、様々な場面で使われるよ。詳しく見てみよう。
undefined型
undefined
型は、宣言されたけど初期化されていない変数の値を表すんだ。この値は、存在しないオブジェクトのプロパティや存在しない配列の要素にアクセスしたときにも返されるよ。
例
1. 未初期化の変数:
let x;
console.log(x); // undefined
2. 存在しないオブジェクトのプロパティ:
let obj = {};
console.log(obj.property); // undefined
3. 存在しない配列の要素:
let array = [1, 2, 3];
console.log(array[5]); // undefined
4. 関数の欠落引数:
function myFunction(a, b) {
console.log(b); // undefined, myFunction(1)と呼ばれた場合
}
myFunction(1);
undefinedの特性:
undefined
はデータ型でもあり値でもあるtypeof undefined
はundefined
を返す
2.3 null型
null
型は意図的に値がないことを表すんだ。この値は、後でオブジェクトを代入する予定の変数を初期化するときや、変数の値をクリアするときによく使われるよ。
例
1. 変数の初期化:
let obj = null;
console.log(obj); // null
2. 変数の値のクリア:
let user = { name: "Alice" };
user = null; // userはもうオブジェクトを指していない
nullの特性:
null
は意図的に値がないことを表す値なんだtypeof null
はobject
を返すけど、これはJavaScriptの認識されたエラーだよ(実際にはnull
はオブジェクトじゃない)
2.4 nullとundefinedの比較
null
とundefined
はどちらも値がないことを示すために使えるけど、目的や使われるコンテキストが異なるんだよ。
特性 | null | undefined |
---|---|---|
型 | プリミティブ型 | プリミティブ型 |
目的 | 意図的に値がない | 未初期化の変数 |
使用法 | 変数の初期化、値をクリア | 存在しないプロパティ、配列の要素 |
デフォルトの値 | いいえ | はい(未初期化の変数、関数のパラメータに対する) |
使用例
1. オブジェクトや配列で変数を初期化:
let myObject = null;
let myArray = null;
2. 値の確認:
let value;
if (value === undefined) {
console.log("変数は未初期化です。");
}
let result = null;
if (result === null) {
console.log("値が存在しません。");
}
3. 値のクリア:
let person = { name: "Alice" };
person = null; // もうpersonはオブジェクトを指していない
4. プロパティの存在確認:
let obj = {};
if (obj.property === undefined) {
console.log("プロパティは存在しません。");
}
JavaScriptでnull
とundefined
の違いを理解することは、値を適切に管理し、コードのエラーを防ぐために重要だよ。
undefined
は通常未初期化の変数や欠落したプロパティを示し、null
は意図的に値がないことを示すために使われるんだ。
これらの特別なデータ型を正しく使うことで、コードはもっと理解しやすくて予測可能になるんだよ。
GO TO FULL VERSION