【JavaScript】データ型
基本型と参照型の2つに分かれる
JSで扱うことができる主なデータ型
基本型
- 基本型の変数には値そのものが直接格納される
- 数値型(number)
- 文字列型(string)
- 真偽型(boolean)
- 特殊型(null/undefined)
参照型
- 参照値(値を実際に格納しているメモリ上のアドレス)を格納する
- 配列(array)
- オブジェクト(object)
- 関数(function)
うむー‥なんとなくわかる
リテラル
データ型に格納できる値そのものをリテラルというらしい
の3つがある、ふむー
数値リテラル(number)
浮動小数点ってなんぞや
検索かけてみたけどわからない‥
Wikipedia読んでもわからなかったので
とりあえずあとで聞いてみることにして先に進んでしまうのよ
文字列リテラル(string)
文字列リテラルはシングルクォート(')、ダブルクォート(")で囲む必要あり
'ここが文字列リテラルだよ' "ここもだよ"
文字列リテラルでは
エスケープシーケンスしなければならい文字列があるそうな
そもそもエスケープシーケンスとは‥
特別な意味を持つ文字を「\+文字」という形式で
表現すること、ふむ
主なエスケープシーケンスめもめも
- \b
- バックスペース
- \f
- 改ページ
- \n
- 改行(LF:Line Feed)
- \r
- 復帰(CR:Carriage Return)
- \t
- タブ文字
- \\
- 円マーク
- \'
- シングルクォート
- \"
- ダブルクォート
- \xXX
- Latin-1文字(XXは16進数)
- \uXXXX
- Unicode文字(XXXXは16進数)
たとえばたとえば
document.write('He\'s Hero!!');
とか
window.alert('このあと改行が入ります。\r\nほら、入った!');
とか
さてここで一個疑問が
なんで\r、\n両方入れる必要があるのよ
そもそも\rの復帰(CR:Carriage Return)ってなんなのよ
調べてみた‥
カーソルを同一行の先頭位置に移動させる意味を持つ、ふむー
いや意味わかってもなんで両方必要なのかわからず‥
とりあえずタイプライターが由来なのはわかった
ためしにどんな風に表示されるか下記で試してみた
document.write('このあと改行が入ります。\r\nほら、はいった!'); window.alert('このあと改行が入ります。\r\nほら、はいった!');
document.write();ではどっちかだけでも改行され
window.alert();では改行されないという結果に
なんでだー
とりあえず両方書かなきゃダメなのはわかったけれども
はい!次!
配列リテラル(array)
うん、配列はわかる!
配列リテラルはカンマ区切りの値を
ブラケット([‥])で括った形式で表現する
['りんご', 'みかん', 'なし']
配列内の値にはインデックス番号でアクセスできる、うむ
インデックスは0スタートなのをお忘れなく
これ私バカだからなんかうっかりしがちなのよなー
var ary = ['りんご', 'みかん', 'なし']; document.writeln(ary[0]); //1番目の要素を取得(りんご)
配列の入れ子も可能
var ary = ['りんご', ['みかん','いよかん'], 'なし']; document.writeln(ary[1][0]); //2番目の要素の中の1番目の要素を取得(みかん)
インデックス番号を繰り返すことで
入れ子の入れ子のそのまた入れ子の‥って
個々の要素にアクセスできるのね、ふむ
オブジェクトリテラル(object)
名前をキーにアクセスできる配列です
‥ってどういうこと?ってなったけど
要はさっきの配列のインデックス番号が
文字列になりましたって話なのね、はあく
ハッシュ、連想配列ともいうらしい、ふむー
他の言語ではオブジェクトと連想配列は
イコールじゃないらしい
Javaだとどーなんだろー‥あとできいてみよ
配列内の個々のデータは要素と呼んでいるけれど
オブジェクト内のデータはプロパティと呼ぶらしい、なんで
文字列、数値などの情報に限らず
関数も含むことができるとか
ほんでもって関数を格納したプロパティのことを
メソッドという、ほう‥なんかよく聞くぞこの単語
またあとで詳しく説明があるとのことなので
ここでは一旦スルーして、オブジェクトオブジェクト‥
var obj = {x:1, y:2, z:3}; document.writeln(obj.x); //xの中身(1) document.writeln(obj['x']); //xの中身(1)
オブジェクトリテラルは大カッコじゃないんだね!
中カッコなんだね!コロン(:)でつなぐ、うむ
個々のプロパティにアクセスするには
ドット演算子、ブラケット構文の2つの方法がある、ほう
obj.x //ドット演算子 obj['x'] //ブラケット構文
ドット演算子のプロパティ名は識別子
ブラケット構文のプロパティ名は文字列
ここで識別子の命名規則のおさらいをw
- 1文字目は英字/アンダースコア(_)/ドル記号($)のどれか
- 2文字目以降は、1文字目で利用可能な文字か数字
- 変数名に含まれる英数字の小文字/大文字は区別される
- JSで意味を持つ予約語じゃないこと
ふむ、たとえばプロパティ名が数字だった場合は
ドット演算子でアクセスすることができない、ってことね、はあく
関数リテラル(function)
関数!きた!
関数とは‥
何かしらの入力値(引数)を与えることによって
あらかじめ決められた処理を行い
その結果(戻り値)を返すしくみ
ふむ
これも後述すると‥ほう‥了解です‥
未定義値(undefined)
変数の値が定義されていないことを表す
var x; var obj = {a:1}; document.writeln(x); //undefined(値が設定されていない) document.writeln(obj.x); //undefined(プロパティが存在しない)
nullはあまり利用しないそうなのでまたあとで
よし!データ型!おわり!
次は演算子!!!