こう 聞かれます
- 「null と undefined は
何が 違いますか」 - 「値が
無い ことを 表すとき、 どちらを 使いますか」 - 「
??と||は、どう 使い 分けますか」
面接官が 見ている点
- 「どちらも空っぽ」で
止めず、 誰が 入れた 空なのかの 違いを言えるか - 無い値を
安全に 扱う 書き方 ( ??と?.) を知っているか - API や JSON で
やり取りする ときに、 違いが 表に 出る ことを 分かっているか
短い答え
- undefined は
「まだ値が入っていない」 状態で、 宣言しただけの 変数や、 無い プロパティを 読むと JavaScript が 自動で 返します。 - null は
「値が無い」と 書き手が 決めて 入れる 値で、 「わざと空にした」 ことを 表します。 - 無い
値には ??で既定の 値を 用意し、 ?.で安全に 取り出します。 JSON に すると undefined の 欄は 消え、 null の 欄は 残る 違いも あります。
少し 詳しい答え
誰が 入れた空か
利用者の
JavaScript
let user = { name: "Aki", nickname: null };
console.log(user.nickname);
console.log(user.age);
console.log(typeof null);
console.log(typeof undefined);
console.log(JSON.stringify({ a: undefined, b: null }));null
undefined
object
undefined
{"b":null}無いtypeof null が object にvalue === null で
最後の
?? と ?. で 無い値を扱う
JavaScript
const count = 0;
console.log(count || 10);
console.log(count ?? 10);
const user = null;
console.log(user?.profile?.city);
console.log(user?.profile?.city ?? "未設定");10
0
undefined
未設定|| は 0 や?? は null と undefined の
?. は、user.profile.city と
チームでの 決めと弱点
「わざと空にした」は null、
TypeScript をstring | null のように、
よく ある間違い
- 「どちらも同じ空っぽ」と言う
自動で 入る 空と、 書き手が 決めて 入れる 空の 違いを 言えると、 扱い方の 話に つながります - 既定の
値を ||で入れて、 0 や 空の 文字列を 消してしまう null と undefined だけを 置きかえたい ときは ??を使います - API で
空に したい欄に undefined を入れる JSON に 直すと 欄ごと 消えて、 相手に 届きません。 空に するなら null を送ります
深掘りの問い
- 「関数が
何も return しないと、 何が 返りますか」 undefined が 返る、と 答えます。 引数を 渡さなかった ときの 引数の 中身も undefined です - 「
?.を使いすぎると、 何が 困りますか」 本当は 必ず あるはずの 値が 抜けていても 気づかず、 あとの別の 場所で 変な 表示に なることがあります。 必ず ある 所は そのまま 読み、 無いとおかしい 所は エラーに する、と答えます - 「DB の NULL と
同じですか」 似ていますが 別の 物です。 DB の NULL は 「値が分からない」を 表し、 比べ方にも 独自の 決まりが ある、と答えます