web関連

【javascript】underfinedについて

よくみる字面なんだけどちゃんと調べたことってないなぁって思ったので調べてみた

undefinedとは

undefinedは「グローバル変数」で「変数を宣言したときの初期値」
undefinedは日本語で「定義されていない」って意味

型はundefinedで値はundefinedで初期値はundefined

確認がてら書き出し

// グローバル変数undefinedの値確認
console.log(undefined);// undefined

// 型チェック
console.log(typeof(undefined));// undefined


// 変数の初期値チェック
let test;// 空の変数を宣言
console.log(test);// undefined
グローバル変数、型、変数の初期値の確認
全部undefinedだね

条件式でundefinedかどうか確認

if文とかでundefinedかどうかチェックするときに、型まで厳密にチェックする===を使わないと駄目みたい
==だとnullまでチェックしちゃうんだって

let test;
if (test === undefined) {
  console.log("undefinedだよ");// 初期値undefinedだから出力
}
if (test === void 0) {
  console.log("undefinedだよ");// 初期値undefinedだから出力
}

2パターンのっけとく

undefinedはグローバル変数で必ずしも値がundefinedじゃない可能性があるとかでvoid 0を使えば必ずundefinedを返すとかで使ったりするみたい

ただ、この書き方だと変数が宣言されてなかった時にエラーになっちゃうので

if (typeof test === undefined) {
  console.log("undefinedだよ");// 型がundefinedだから出力
}

ってtypeofで型で判別をするのであれば変数があるかないかじゃなくて、型がundefinedかどうかでチェックできるからエラー吐かないみたい

でも、この書き方も使わないでくれみたいな記事あるね

グローバル変数undefinedの代入と宣言周りについて

グローバル変数としてundefinedが存在しているから再宣言禁止のletを使うと「Uncaught SyntaxError: Identifier ‘undefined’ has already been declared」って定義済みだよーってエラーを吐く

let undefined = 1;
console.log(undefined);// Error

確認で試してみた

じゃあ、var使って宣言すっかってグローバル変数を再宣言しても値は変わらない

var undefined = 1;
console.log(undefined);// undefined

当然代入も駄目

undefined = 1;
console.log(undefined);// undefined
グローバル変数としてundefinedは存在するよって確認

でも、ローカル変数として使う分には使う分には問題なく変数として宣言できるし代入できる

let sample = () =>{
  let undefined = 1;
  console.log(undefined);
}
sample();// 1
ローカル変数だとundefinedの値を変えることができちゃうみたいね
こういう可能性があるからvoid 0って使ってるのかな?

nullとundefinedの違い

最後に、nullとどう違うんだろう?って思ったのでメモ
結果、値に何も設定しないと初期値がundefinedで、nullは意図的に入れないと存在しない値っぽい

undefinedはundefined型だし、nullはnull型

エンジニアの好みで値が空の時の処理が変わるみたいで、undefinedをそのまま使ったりnullを使ったり空文字を使ったり色々あるみたい

とりあえず初期値はundefinedが入って、nullは意図的に入れないと存在しないって認識でいればとりあえずはよさそう

おまけ:空文字や0はundefinedでもnullでもないよ

確認がてら書き出し

let test = "";
console.log(typeof test);// string型
test = 0;
console.log(typeof test);// number型

とりあえず、undefinedについて謎だった部分調べて備忘録

Leave a Comment

入力エリアすべてが必須項目です。メールアドレスが公開されることはありません。

内容をご確認の上、送信してください。