# データ型

TJS2 には変数に「型」はありませんが、内部的には型を持っています。型を持たないと言うよりは、型が自動的/動的に扱われるということです。
内部の型としては、`void`, 整数型、実数型、文字列型、オブジェクト型、オクテット列型があります。

# void

void は、何も表していないことを表します ( JavaScript とは意味が違います )。宣言したての変数は `void` です。
`void` 同士の比較には、`===` (識別) 演算子を用います。
`typeof` 演算子は、これに対しては `"void"` を返します。

# 整数型

TJS2 は整数型として 64bit の精度の整数を扱うことができます。整数は通常符号あり整数として扱われますが、唯一の例外として `>>>` 演算子は、左辺を符号なし整数として扱います。
typeof 演算子は、これに対しては `"Integer"` を返します。

# 実数型

TJS2 は実数型として 64bit の精度の実数 ( 倍精度実数 ) を扱うことができます。
typeof 演算子は、これに対しては `"Real"` を返します。

# 文字列型

TJS2 は長さ制限のない、ゼロ終結文字列を扱うことができます。ゼロ終結文字列とは、`\0` で文字列が終わると仮定して文字列を扱うと言うことです。
文字コードはワイド文字 ( 通常は UNICODE ) を扱いますが、16bitのワイド文字か 32bitのワイド文字かは TJS2 がコンパイルされた環境によって異なります。たとえば Windows では 16bit ですが、Solaris や Linux では 32bit になります。
typeof 演算子は、これに対しては `"String"` を返します。

# オブジェクト型

オブジェクト型は、オブジェクトを保持する型です。`new` 演算子で確保したオブジェクトのほか、関数、クラス、プロパティオブジェクトなどはすべてオブジェクト型になります。
`typeof` 演算子は、これに対しては `"Object"` を返します。
TJS や JavaScript と異なり、TJS2 のオブジェクト型は、オブジェクトそのものへのポインタと、それが使用されるべきコンテキストとなるオブジェクトのポインタの２つのポインタを内部に持っていて、いわゆるクロージャを実現できるようになっています。このコンテキスト部分を変更する演算子が `incontextof` 演算子です。

# オクテット列型

オクテット列型は、8bit 幅のデータ列 (オクテット列列) をあつかう型です。主にバイナリデータを扱うための型です。
`typeof` 演算子は、これに対しては `"Octet"` を返します。