型の自動変換


異なる型の演算

JavaScript では、異なる型の演算もサポートしています
通常、異なる型の演算はエラーとなりますが、JavaScript はこれを自動変換して
同じ型どうしに型キャストしてから演算します

型の自動変換には決められた法則があります
基本的には文字列がもっとも優先で、式の中に文字列があれば文字列に変換されます

演算変換
文字列と数値の加算文字列に変換
数値とブーリアンの加算数値に変換
文字列とブーリアンの加算文字列に変換

ブーリアンの数値化とは、どのような値なのでしょうか?
これは、C などを経験している人は一般的な概念なのですが
true は 1、false は 0 に変換されます
var i = 2001 , s = "Welcome!" , b = true;
alert(s + i);
alert(i + b);
alert(b + s);


それぞれ、型の違う変数どうしの加算を表示しています
alert() メソッドはどの方を渡しても最終的には文字列として表示しますが
途中の加算過程で、様々な型変換があることを確認できます

i + b では、ブール値 true が数値 1 に変換されていることが確認できるはずです
false であれば 0 なので値は変化しません

文字列は比較に使用された場合数値に変換されます
数値にできない場合は false となります
var str = "100" , i = 10;
alert(str < i);


正しく比較されていることが確認できますが、これは文字列が数値に変換できるからです
数値にできなかった場合は、型が異なるので false と解釈されます


厳密演算子

C や Java では存在しない、JavaScript 特有の論理演算子が存在します
厳密演算子と呼ばれるものです

これは、JavaScript が簡易のために実装する自動型変換のために存在するもので
等価比較( == )、または非等価比較( != )を行う時に、自動型変換を行わないようにするものです
通常は自動型変換が行われても問題ありませんが
プログラムによっては、それが好ましくない場合があり、そのような場合に使用します

自動型変換をしない厳密な等価を行うには === 演算子を
非等価を行うには !== 演算子を使用します
これらを使った場合、オペランドの型が異なる場合は false を返します
var str = "100" , i = 100;
alert(str == i);
alert(str === i);


通常の等価演算子では、文字列 str が数値に変換され true となりますが
厳密等価演算子で同様のチェックをした場合、型が異なるので false が返ります
型も、値も同じで始めて true が返ります



前のページへ戻る次のページへ