JavaScriptの関数における引数の省略と、undefinedについて

この記事を書いたチーム:frontier
JavaScriptの関数における引数の省略と、undefinedについて

JavaScriptにおける関数の引数について

【エンジニア募集中】フルリモート可◎、売上/従業員数9年連続UP、平均残業8時間、有給取得率90%、年休124日以上 etc.  詳細はこちらから>

JavaScriptの関数での引数は、指定を省略することができます。

例えば、このように。func_messageでは引数2つが定義されていますが、呼び出す側が引数を1つだけにしたとしても、問題なく動作します。

 

ですがこの時、上記の例で言えば「prop2」には、undefinedが入ってきています。結果として、alertダイアログには以下のように表示されてしまうでしょう。

aaa

undefined

そこで、引数には「デフォルト値」を指定することができます。

 

これで、表示は以下のようになります。

aaa

bbb

ですが、引数にデフォルト値を指定する方法はIEなど一部のブラウザでは使えません。JavaScriptエラーになってしまいます。これを回避するために、以下のように書くのが安全です。

 

これで、引数をすべて与えない時でも、不用意に「undefined」が現れる現象を回避できるようになりました。

Undefinedとはなにか

「undifined」とは、未定義の状態です。

 

いわゆる「null」とは少し違います。nullは「nullという値が指定された状態」ですが、undifinedはあくまでも「未定義」です。つまり、以下のようなコードを書いても「undifined」になります。

 

では、今から使おうとする変数やプロパティがundefinedかどうかを調べる方法はあるのでしょうか。

undefinedを調べる方法

(1)「===」を使って比較する

さらっと関数の引数を説明する部分で記述していますが、「===」を使って比較をすることで、undefinedか調べることができます。

 

また、void演算子(値を評価してundefinedを返す)を利用して、次のように書くこともできます。

 

この「void」は、よくHTMLに使われる「javascript:void(0)」のvoidと同じです。undefinedを返すだけですので、「void 1」と書いても同じですが、慣例的に「void 0」と記述しています。

なお、イコール3つは、「厳密等価演算子」と呼ばれます。左右の値の他に、型も比較して判定をします。ここで、イコール2つにすると、結果が変わってしまいます。

 

イコール2つの場合、「nullまたはundefinedであればtrue」を返すのです。どちらでも問題ない場合はよいのですが、undefinedのみをピックアップして対応したい場合は、これではNGになります。

(2)「typeof」を利用する

typeofはデータ型を返してくれます。

 

返り値は「データ型の名前」なので、undefinedは文字列で指定して比較する必要があります。

以上、undefinedを正しく制御して、予期せぬエラーを回避していきましょう。

最後までご覧いただき、ありがとうございました。

【エンジニア募集中】フルリモートも◎(リモート率85.7%)、平均残業8時間、年休124日以上、有給取得率90% etc. 詳細はこちらから>

Smallitのサービス