JavascriptはJavaと名前が類似しているためか、言語仕様も違いを取り違えてしまう事があります。通常は二つの言語を同時に使うことはないので実際の不都合は起こりませんが、JSPやサーブレットを使ってサーバーサイドアップリケ―ションを作る場合には、ブラウザ側でJavascriptを使うことになるので、二つの言語仕様の違いを注意する必要があります。
大きな違いの一つが、Javascriptでは変数定義時に型の区別がなく万能型のvar(variable)で文字列も、数値も、論理型も定義出来てしまう事です。(勿論内部では処理上の型の区別はしています。)
順に整理すると、変数には基本型とオブジェクト型があり、
基本型には前述のように
− 数値 − 文字列 − 論理型
ここで、さらに数値は整数も実数も区別がなく、初期化時に小数点が付けるか付けないかの違い。内部的には常に実数で扱われている。文字列は1文字は1字の文字列として扱い、文字列の定義時にはシングルコートもダブルコートも使える。論理型はtrueとfalseのみ、内部的にはtrueが1でfalseが0.
オブジェクト型とは基本型以外の型を総称していて、プロパティーの集合と考えられます。プロパティには基本型やオブジェクトを格納できます。オブジェクトとは配列や関数も含まれます。具体例を示せば
var person = new object; //オブジェクト型の生成 person.name = “佐藤”; //オブジェクトプロパティへの値の代入 person.age = 20; person.alive = true; console.log(person); //出力
また、関数もオブジェクト型でありプロパティとして扱えます
person.age = function() { return person.age; }
無名関数を使えば
var people = function(name, age, alive) { this.name = name; this.age = age; this.alive = alive; }
と記述でき、
var he = new people(“秋草”, 77, false);
people関数を使ってオブジェクト型変数heを定義することが出来ます。
ここで、people関数をコンストラクタと呼び、オブジェクトの原型であるクラスを形作ります。
つまり、Javascript はあまりクラスを意識しませんが、コンストラクタによって初期化されるのがオブジェクトであり、オブジェクトの原型がクラスとなりますから、Javaなどオブジェクト指向言語との類似性が成り立ってます。