【GAS初心者必見】nullとundefinedの違いをガチャガチャで超カンタンに理解!

うーん、GASで使う `null` と `undefined` の違いがいまいちピンとこないなあ…
猫男
猫男
catman
catman
ふふふ、そんなときは「ガチャガチャ」でたとえてみようか。

 

えっ、ガチャガチャ!?
猫男
猫男

ガチャガチャでわかる null と undefined の違い(GAS編)

まずは undefined のイメージから。

undefined = 入れ忘れカプセル

カプセルを回して出てきたと思ったら…
中身がなにも入ってなかった!

これは製造ミス。何かを入れるはずだったのに、「まだ何も設定されていなかった」状態です。

👉 GASでは、変数を宣言したけどまだ何も代入していないと、この「空カプセル」状態=undefinedになります。


function test() {
  let capsule;
  Logger.log(capsule); // → undefined
}

null = わざと空のカプセル

カプセルを開けたら、「このカプセルは空です」という紙が入っていた。

これは「意図的に空」として扱っている状態。

👉 GASでは、「ここには値が“ない”と決めた」場合、自分で null を入れます。


function test() {
  let capsule = null;
  Logger.log(capsule); // → null
}
なるほど…!undefined はうっかり入れ忘れ、null はわざと空!
猫男
猫男
catman
catman
その通り!GASで関数に値が渡ってこないときや、条件分岐で空チェックするときにめちゃくちゃ大事だよ。

まとめ

状態 ガチャガチャ的なたとえ GASでの意味
undefined 中身を入れ忘れた空カプセル(ミス) 変数が未定義(値がセットされていない)
null 「空です」と書いた紙を入れたカプセル(意図的) 開発者が意図的に「空」として設定した
ガチャガチャでたとえてもらったら、めっちゃわかりやすかった!GASで使う場面がイメージできたよ!
猫男
猫男
catman
catman
たとえ話はGASでもバッチリ通用するさ。また一緒にコード回していこうぜ!

【練習問題】GASで null と undefined をマスターしよう!

問題1:undefined の確認

次のコードを実行すると、`Logger.log` には何と表示されるでしょう?


function testCapsule() {
  let capsule;
  Logger.log(capsule);
}

問題2:null の代入

以下のコードにおいて、`capsule` に「意図的に空」とわかるよう代入してください。


function testNull() {
  let capsule = ???;
  Logger.log(capsule);
}

問題3:null と undefined を条件で区別する

次のような変数 `capsule` があるとします。
それが `undefined` のときは「未設定」と表示し、`null` のときは「空のカプセル」と表示、それ以外は「中身あり」と表示するコードを完成させてください。


function judgeCapsule(capsule) {
  if (???) {
    Logger.log('未設定');
  } else if (???) {
    Logger.log('空のカプセル');
  } else {
    Logger.log('中身あり');
  }
}

【解答・解説編】

問題1の解答


undefined

解説:
変数 `capsule` は宣言だけされており、まだ値が代入されていないため undefined です。

問題2の解答


function testNull() {
  let capsule = null;
  Logger.log(capsule);
}

解説:
null は「空である」ことを明示的に示す値です。GASでも自分で「ここは空ですよ」と指定したいときに使います。

問題3の解答


function judgeCapsule(capsule) {
  if (typeof capsule === 'undefined') {
    Logger.log('未設定');
  } else if (capsule === null) {
    Logger.log('空のカプセル');
  } else {
    Logger.log('中身あり');
  }
}

解説:
typeof capsule === 'undefined' で未定義を判定し、
capsule === null で明示的な空を区別しています。これで nullundefined の違いを条件分岐できます。