標準出力と標準エラー出力を闇に葬るNetBeansIDEのコードテンプレートで爆速コーディングSaSSでメディアクエリをmixinでまとめるPHPって型宣言(タイプヒンティング)してもint型がstring型に型変換されるの?javascriptで何らかの値を比較する場合、たとえばif文などで分岐させる場合の条件比較に気を付けるべきことを説明したいと思います。変数の型についてまず前提の話から。以下の簡単なコードを見てほしいです。null;変数宣言した場合に何も値を代入しないと、その変数はundefined(未定義)を持つことになります。上記のコードでは変数aは宣言だけを行い、何も代入していないのでundefinedとなります。これはundefined型とよばれる型となります。bは数字を代入しているので数字型(Number型などとも)となります。(数字型は数字以外にNaNという値を取る場合があります。Numberと呼ばれる値で計算結果などが数字に変換できない場合などに現れます。)cは文字を代入しているので文字列型。dは真偽値型でtrue(真)かfalse(偽)のどちらかになります。してしまうと文字列型になる)eはオブジェクトを代入しているのでオブジェクト型。javascriptでは関数もオブジェクト扱いなので、変数に関数を代入した場合はオブジェクト型になります。最後のfは計算が間違った際などに代入されるnull型です。このようにjavascriptは内部で型を持っていますが、変数宣言時には型宣言は行わないです。代入された値で自動的に型が決まることになります。型変換というのは、違う型同士を比較、計算する場合に型を合わせる(変換する)ことを指す。どのように変換するかは言語の仕様によって変わるので、統一されてはいないです。javascriptでも定められたルールに従い型変換が行われています。以下に型変換の簡単な実例を挙げたいです。通常「文字列と数字を足す」ということはできないですが、型変換が行われることによって計算が可能になります。上記のコードではaは文字列、bは数字型で宣言しています。typeofは型を調べる演算子です。例1は計算の結果は12341234となり、型はstring(文字列)となりました。これは数字型のbが型変換され文字列型として計算されたことを示す。逆に例2は計算の結果は0となり、型はnumber(数字型)となりました。今度は文字列型のaが型変換され数字型として計算されたことを示します。このように型が違う場合は型変換が行われることになります。比較演算子の挙動とても重要なことだが「比較演算子==」は比較する同士で型が合っていない場合、型変換を行おうとします。その為、以下の例で言えばaはundefinedとなりますが、tureと比較できるように型変換が行われることになります。console.log("型が違うか、定義されていないか、0、NaN、null、空文字です");}tureは真偽値リテラルのtureということになります。tureという文字列ではないことに注意していただきたいです。javascriptでは真偽値型への型変換の場合、undefined、null、0、空文字列、NaNはfalseに変換されるようになっています。上記のコード例ではaのundefinedは真偽値型へ変換されます。型変換の結果undefinedはfalseに変換されます。true)は偽となります。bは上記で述べたとおりnull、0、空文字列、NaNではないので、tureと評価されます。true)は真となります。===」は型が合っているかどうかまで評価します。console.log("型が違うか、定義されていないか0、null、空文字、NaNです");//これが表示されるはず}「厳密比較演算子===」では型変換を行わなわず、型自体が合っているのかまで比較します。true)は(undefined===ture)と言う意味になります。型も違うし値も違うので偽となります。true)という意味になり偽となります。どちらとも偽になるので最後のelse部分が実行されるという訳です。なにかを比較する時、演算子の使い方で結果が変わってくるという実例です。まとめ通常はより厳密な「厳密比較演算子===」を使う機会が多いと思います。ロジックによっては型変換を行う「比較演算子==」が便利な場合があります。いずれにしても、比較演算では比較対象の型の在り様で、比較結果が変わる可能性があると言うことを注意したいです。mino長年働いていた会社をリストラされてしまったおっさん。なにを思ったか未経験のプログラミングで再起を図ろうとする。プログラミングを勉強していく上で苦しんだこと、ハマったことを中心に記事を書きます。