デフォルト引数はnullには適用されない(undefinedのときだけ)
関数のデフォルト引数は、渡された値が厳密にundefinedのときだけ使われます。nullを渡すと「値が無い」という意図があっても、nullがそのまま使われてデフォルト値は適用されません。
なぜエラーが出ないのか
出力: Hi null
(エラーなし)- JavaScriptは何も報告しません。文法として正しいためです
出力: Hi null- 実際の挙動 — 期待した結果と食い違っている箇所
見つけ方- エラーが出ないので、出力を目で確かめるか、コードを目で追うしかありません。この種の誤りが最も発見が遅れます
このエラーが出る典型パターン
パターン1
1 function greet(name = "Guest") { 2 return "Hi " + name; 3 } 4 console.log(greet(null )); ^
出力: Hi null期待: Hi Guest (エラーにはなりません)
デフォルト引数はundefinedのときだけ使われます。nullは値として扱われるため、そのまま"Hi null"になってしまいます。
直し方: null を undefined にします。
広告
広告スロット(未設定)
パターン2
1 function createUser(role = "guest") { 2 return role; 3 } 4 console.log(createUser(null )); ^
出力: null期待: guest (エラーにはなりません)
「値が無い」ことを表すつもりでnullを渡しても、デフォルト引数の判定はundefinedとの厳密比較なので適用されません。
直し方: null を undefined にします。
パターン3
1 function connect(timeout = 3000) { 2 return timeout; 3 } 4 console.log(connect(null )); ^
出力: null期待: 3000 (エラーにはなりません)
timeoutにnullを渡すとそのままnullが使われ、意図した既定値3000は適用されません。
直し方: null を undefined にします。
よくある誤解
「nullもundefinedも空っぽを表すから同じように扱われるはず」という思い込みは誤りです。デフォルト引数の判定はundefinedとの厳密な比較で行われるため、nullは「値が渡された」とみなされます。
まとめ
デフォルト引数はnullには適用されない(undefinedのときだけ)は上級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。