変数型とのお付き合い。

型はCやJavaのように変数宣言時に決めるものだけど、javascriptvarで初期化する事で自動的に判別し、型を決めます。非常に便利な機能なのですが、自動で変更されてしまうために、思わぬ型の変更がされてしまうのが弊害となります。万能な彼らのそういった部分とうまくお付き合いするために、解消するためにしっかりルール付けしたいと思います。

※内容はほぼ自分用のノートです。

javascript 主に使われる型は2種類

他にもObject、Function、boolean、特殊なものにundefinedやnull,NaNなど、数種類に分類出来るのですが、varによって宣言され、普段利用している変数は主に2種類に分けられます。型についてはtypeofで調べる事が出来ます。

String型

文字列型。文字を扱う事が出来ます。宣言のルールとして、クオートで囲い宣言します。また、new Stringを利用して宣言するとObjectとして扱われます。記述ルールとしてはアンダスコアで区切るとメソッドなどと区別が出来て便利です。

var string_literal = 'Hello World!';  
//typeof string_literal >> string  

var string_object = new String( 'Hello World!' );  
//typeof : object

しかし、リテラルの状態でもStringメソッドを利用すると、一時的にObjectとして扱われたりもします。この辺がjavascriptのややこしい所ですが、気にせずに書けるという点は利点なのかもしれません。

var string_literal = 'Hello World!';  
string_literal.match('Hello');  
//StringObjectのメソッドが使え、その間はオブジェクト扱いとなる。

Number型

数値型。主に数字を扱う変数です。宣言のルールとして、クオートで囲わずに数値のみを宣言します。すべて大文字、それとアンダスコアで宣言しておくと分かりやすいです。

var INT_NUMBER = 5;  
//typeof : number

計算式や、実数を代入する場合に宣言する変数です。基本的には数字のみを扱うものですが、進数が違う場合はこれに限りません。実は、一番厄介なのがこのタイプで、気づくと文字列に心変わりしてしまいます。そうなってしまうと計算式を起こした時、計算されずに文字列として結合されてしまいます…。

//望む結果  
1 + INT_NUMBER;  
//>> 6 の数値型  

//しかし、何かしらの影響でINTが文字列になってしまった  
1 + INT_NUMBER;  
// >> 15 の文字列

数値に戻すにはparseIntを使います。引用で宣言する場合は注意しておきたい点です。

INT_NUMBER = parseInt(INT_NUMBER);  
1 + INT_NUMBER;  
//>> 6 の数値型

文字列に変換されてしまう原因として、どこかで文字列と結合してしまってる場合があります。文字列と結合すると、エラーを吐かずに文字列型に変換される特性があります。逆にこれを利用すれば数値型から文字列へ簡単に変換する事が出来ます。

var INT = 5  
,     int_string = ''+INT;  

// 5 typeof : string

わざわざ文字列型で宣言し直さなくても活用できます。

その他の宣言ルール

プロパティやFunction型、メソッド等はキャメル形式で宣言しておくと差別化がし易いので便利です。

var functionObject = new Function(){};  

this.propName = 'This is Object';

javascriptは、変数型を自動に判別してくれる分エラーを吐かずスルーしてしまうので、デバッグ時に混乱させられることがあります。そのためにも宣言を分かり易くルール付けしておき、うまくお付き合い出来るようにしておくのが良いのでしょう。