LINE2019.01.22この記事は約9分で読めます。スポンサーリンクワテも最近勉強し始めたTypeScriptであるが、難しい。JavaScriptを習い始めた当初も、undefinedやnullで悩んだ。意味を備忘録としてまとめておく。これらは、JavaScriptのコードの中に良く登場するので、その意味を理解しておくと良いだろう。何か?TypeScriptで例えばこんなふうに書いて、関数myfunc()を定義する。}}関数の引数はmyfunc(i=0)のような記述が可能で、もしiが与えられない場合にはデフォルトの引数0を使うと言う意味だ。Studio2015では、このTypeScriptは以下のようにJavaScriptに自動変換された。{}));なんだか見慣れぬ記述がある。0って何やねん?分からん。void演算子そういう時はStackOverflowだ。最近は、プログラミング関係で検索する場合には、まずは英語版のStackOverflowを見るようにしている。site:StackOverflow.comとすれば確実だ。質問文の後にsite:を指定するとそのサイト内から検索される。第一位のヒット結果がこれだ。Overflowワテの質問と全く同じ質問を見つけたぞ。その回答を見てみたら、voidという演算子(operator)は引数を一個取り、必ずundefinedをリターンすると言う事だ。Date())どれもundefinedが得られる。引数void(引数)のどちらの形式も可能だ。何でこんなvoidとかいう演算子が必要なのか?と言う疑問が湧く。その前に、JavaScriptの鬼門である、nullとundefinedを復習しておく。JavaScriptのnullとundefinedを考察するJavaScriptにはnullundefinedという、似たような属性?がある。JavaScriptを習得し始めた頃は、ワテは良く混乱していた。C++でのプログラミング経験が長いので、何かが空の状態を表す属性は一つで十分でCならNULLが一つあればワテは足りる。*));free(ptr);ptr=NULL;freeしたポインタは必ずNULLを入れる習慣を付けておくほうが良い。C++の列挙型を自前で定義した場合などに、初期値として何も選択されていない状態を与えておきたいなら、こんなふうにUndefinedなどと言う要素を追加しておけば良いし。MyMode::MyEN::Undefined;なので、ワテはJavaScriptのnullとundefinedは殆ど区別せずに使っている。a.property;みたいなチェックをする場面が良くある。この場合、変数aがnullになるのかundefinedになるのかは、aにはどういう値が入るのかを自分でちゃんと把握していれば両方の判定は不要で片一方(例えばnull)だけの判定で良いと思う。面倒なので、こんな安易な関数を作って使っている。...}という記述が良く出て来る。JavaScriptのundefinedのヘンテコな仕様(現在は廃止)一体全体、誰がJavaScriptにnullとundefinedという似たようなものを持ち込んだんだろうか。二つもあったら紛らわしい。思うのはワテだけかもしれないが。それと、さらに驚くべきことに、JavaScriptのundefinedに関しては、アホみたいな信じられない事が出来るのだ。true;というように変数undefinedを定義出来てしまう(ワテがJSを学習し始めた2015年頃)。ワテはこの事実を知った時に、JavaScriptを設計した奴はアホかと思った。JavaScriptの言語そのものは非常に使い易くて好きなのだが、この点だけは必然性が理解出来ない。いう目的があってこんな事が可能な言語仕様にしたのだろう。C/C++でNULLの意味を自由に変更出来たりしたら、世の中のコンピュータがまともに動くとは思えない。本日(2016年5月)の時点では、こんなヘンテコな記述は出来ないようだ。objectとして定義されているのでこの問題は起こらない。昔はJavaScriptプログラムの中でundefinedと言うのが出て来ても、本来のundefinedか、誰かが中身を入れ替えているかもしれない怪しいundefinedなのか分からない問題があった(今もあるか)。undefinedと言うのかも知れないな。文字列のundefinedの使い分けが必要になるのだ。Studio2015で以下のコードを実行してみた。}</script>その結果、二カ所にあるどちらのif文でも変数bはundefinedと判定されてalert文が実行されてundefined:undefinedと表示された。演算子が何故必要なのかを調査した。0でも100でも何でも良い。すればそれは正真正銘の本物のundefinedが得られるのだ(なんのこっちゃ!)。}とすれば変数iがundefinedか否かの判定が出来ると言う事か。面倒くさいなあJavaScript。そんなヘンテコな事するくらいなら、undefinedの中身を変更できるなんていう仕様を採用するなよと言いたい。(現在はワテの希望通り変更出来ない仕様になっている)JavaScriptを設計した人は、一体全体、何がしたくてundefinedの中身を変えられる仕様にしたのだろうか。演算子に付いて考察した。得られると覚えておけば良い。引数は0でも何でも良いのだが、通常は0が良く使われる。ワテには馴染めない文法だが、JavaScript/TypeScriptではそうなっているので仕方ない。undefined変数を自由に定義出来る件に関しては、ECMAScript6が2015年6月にリリースされたので、今後はその手法は出来なくなった。undefinedで混乱する事はなくなったかな。Internationalのもとで標準化手続きなどが行われている。今後、nullとundefinedが一つに統一されれば、ワテとしては大変ありがたいが、まあそれは無理だろうなあ。そんな大掛かりな仕様変更は無理そうだし。言う事で、ワテは今後も以下の自作関数を使い続けるだろう。...}安易だが、お手軽だし。本を読むECMAScript6の本はアマゾンでも少ない。ヨシヒロ)さんの本だ。興味ある人はこのページ下部にあるコメントを参照下さい。StudioのWEBプログラミングで、ASP.NETを使う手法を必死で習得している。