- ベストアンサー
undefinedかnullかどう区別できますか?
- JavaScriptの教科書には、undefinedとnullの区別の仕方についての記載があります。
- 関数で値が返されなかった場合、undefinedとnullの使い方には違いがあります。
- 関数で値が返されなかった場合とは、引数がなかった場合やreturn文がない場合を指します。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
> これがundefinedを返します > 以外はnullと考えてよいでしょうか? う~ん。勘違いされています。 返り値のある関数の場合の返り値は、 整数、実数、文字列、オブジェクト 等々いろんな 型での値があります。 例えば、 文字列から特定の文字を探して、何文字目にそれがあるかを整数で返すという 関数があったとします。本来は、整数の1とか5とかで返す訳です。 しかし、引数で渡された文字列中に対象文字が見つからなかったときは、 返す値をどうするかを 関数を作っている本人が決定することになります。 普通なら 関数をコールする側では、数値との比較で判断したいでしょうから、 null では返さないで、 0とか -1とか、コールした側が使いやすいようにするでしょう。 今回の関数は、整数でなく、見つけたタグのオブジェクトを返す仕様の関数ということなので 本来はオブジェクトを返すのではありますが、 対象が見つからないといった異常時には、0とかundefinededではなく、nullを返したほうが その関数を使う側にとって便利でしょう、、、、ということです。 つまり、返り値は、関数の利用方法を想定して、関数を作る自分が決める事柄です。
その他の回答 (5)
- superside0
- ベストアンサー率64% (463/719)
> するとvoid型の関数かどうかがわかれば、nullかundefindedかどうか自動的にわかるということですね。 いやいや、そういう意味ではありません。 関数のreturn値として、 nullを返すようにも、undefined を返すようにも 自分がどのようにコーディングするか次第です。 しかし、その教科書の意図しているのは、アンカータグが見つからなかったときに undefinedでなくnullを戻すようにコーディングするのが、望ましいでしょう。 ということでしょう。 なお、void型の関数 という C言語やJava言語の言い方をして 混乱させてしまったようで 申し訳ないです。 JavaScriptには void(0) というなにもしない演算子(関数でなく)がありますが、これがundefinedを返します。
お礼
難しいですね。 JavaScriptには void(0) というなにもしない演算子(関数でなく)がありますが、これがundefinedを返します。 以外はnullと考えてよいでしょうか?
- think49
- ベストアンサー率59% (285/482)
No.1 です。 > void型の関数は下記のことですか? 「void型」とは何のことですか? 明示的に return をせず、new 演算子を使わずに関数呼び出しをすれば、その関数の帰り値は undefined となりますが、これを「void型」と称しているのでしょうか。 function sample () {} console.log(sample()); // undefined いずれにしても、「void型」はJavaScriptには存在しない独自用語だと思われます。 > void形でない関数はnullという認識でよろしいでしょうか。 いいえ。 「Object 型を返す関数」が返すべきオブジェクトが存在しない時に null を返り値とします。 getElementById は対象の要素ノードが存在すれば要素ノードとなるオブジェクトを返しますが、存在しなければ null を返します。
お礼
難しいですね、初心者の私には難しすぎます、 ありがとうございました。
- superside0
- ベストアンサー率64% (463/719)
> return値を持たないvoid型の関数では、関数の返り値はundefined。 > void形でない関数はnullという認識でよろしいでしょうか。 そういうことですね。 この例でいえば アンカータグを取得してreturn値で返す関数ということのようなので return値がのあるべき関数ということになるでしょう。 このとき、検索対象となるアンカータグが存在しなかった場合に undefinedを返すように コーディングすることも可能ではありますが、 undefinedでなく、nullをreturnするようにしておくと、 その関数をコールする側にとって判定や条件分岐がしやすくなるでしょう。
お礼
ありがとうございます。 するとvoid型の関数かどうかがわかれば、nullかundefindedかどうか自動的にわかるということですね。 関数名でどちらか識別できるのですか?
- superside0
- ベストアンサー率64% (463/719)
>関数で値が返されなかった場合とはalert()のように引数がなかった場合という意味でしょうか? >それともretunr 変数名などのreturnがない場合という意味でしょうか? 後者です、 関数で値を返すというのは、 returnの値のことです。 ただ、return値を持たないvoid型の関数では、関数の返り値はundefinedとなります。 > 関数で値が返されなかった場合はundefined その通りです。 ですので、 値を返さない関数(つまりvoid型関数) の場合は常にundefinedが返るが 値を返す関数では、有効値またはnullを返すべき というのが、その教科書で意図でしょう。 通常は、見つかった値なりオブジェクトをreturnで返すけれども、 返すべき値が見つからなかったら、return null; で返してくれれば、 その関数をコールした親側にとっては、対象が見つからなかったのか、 それとも変数の未定義のバグなのか の区別しやすいと いうことになります。
お礼
void型の関数は下記のことですか? 難しくてよくわかりません。 return値を持たない関数のことを示すようですが、それは returnを使えない関数ということでしょうか? それともプログラマーが設定しなかった関数のことでしょうか? https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/void つまり return値を持たないvoid型の関数では、関数の返り値はundefined。 void形でない関数はnullという認識でよろしいでしょうか。
- think49
- ベストアンサー率59% (285/482)
ES7 ではオブジェクトが意図的に存在しない事を表す場合には null 値を使います。 getElementById もその仕様に準じています。 http://www.ecma-international.org/ecma-262/7.0/#sec-null-value Re: websaitojisaku さん
お礼
void型の関数は下記のことですか? 難しくてよくわかりません。 return値を持たない関数のことを示すようですが、それは returnを使えない関数ということでしょうか? それともプログラマーが設定しなかった関数のことでしょうか? https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/void つまり return値を持たないvoid型の関数では、関数の返り値はundefined。 void形でない関数はnullという認識でよろしいでしょうか。
お礼
難しくてわからないので、再質問します。 もっと初心者にもわかるように解説していただけるとありがたいです。