みこむらめもむらむらむら

なんかHTML5とかJS勉強とかやりながらめもを綴るブログ

【JavaScript】データ型

さて引き続き
JavaScript本格入門 ~モダンスタイルによる基礎からAjax・jQueryまで
次はデータ型だよ

基本型と参照型の2つに分かれる

JSで扱うことができる主なデータ型

基本型

  • 基本型の変数には値そのものが直接格納される
    • 数値型(number)
    • 文字列型(string)
    • 真偽型(boolean)
    • 特殊型(null/undefined)

参照型

  • 参照値(値を実際に格納しているメモリ上のアドレス)を格納する
    • 配列(array)
    • オブジェクト(object)
    • 関数(function)

うむー‥なんとなくわかる

リテラル

データ型に格納できる値そのものをリテラルというらしい

  1. 数値リテラル
  2. 文字リテラル
  3. 配列リテラル

の3つがある、ふむー

数値リテラル(number)

浮動小数点ってなんぞや
検索かけてみたけどわからない‥
Wikipedia読んでもわからなかったので
とりあえずあとで聞いてみることにして先に進んでしまうのよ

文字列リテラル(string)

文字列リテラルはシングルクォート(')、ダブルクォート(")で囲む必要あり

'ここが文字列リテラルだよ'
"ここもだよ"

文字列リテラルでは
エスケープシーケンスしなければならい文字列があるそうな

そもそもエスケープシーケンスとは‥
特別な意味を持つ文字を「\+文字」という形式で
表現すること、ふむ

主なエスケープシーケンスめもめも

  • \b
    • バックスペース
  • \f
    • 改ページ
  • \n
    • 改行(LF:Line Feed)
  • \r
    • 復帰(CR:Carriage Return)
  • \t
    • タブ文字
  • \\
    • 円マーク
  • \'
    • シングルクォート
  • \"
    • ダブルクォート
  • \xXX
    • Latin-1文字(XXは16進数)
  • \uXXXX

たとえばたとえば

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はあまり利用しないそうなのでまたあとで





よし!データ型!おわり!
次は演算子!!!