やっとjavascriptを勉強してみた

PHPを知らないので注目の話題についていけない
こんな雪の降る日はjavascriptでも触ってみっか。
ということで勉強してみた。


Rubyとの違いを差分学習しようと思ってみてみたら
当然ですが色々と違うのでメモ。

  • 遊ぶ時は spidermonkeyというインタプリタで遊ぼう。jsコマンドで起動。
  • クラスベースでないのでクラスが無いよ。
  • けど、解説ページによってはクラスという言葉が出てくるのでややこしや。
  • 変数は参照。型無し。varで宣言。関数も変数に代入できて変数名()で実行できるのは良いです。
  • 変数スコープがグローバルと関数内スコープの2つしかない。(実装はシンプル)
  • だけど、名前空間をユーザ(プログラマ)が気にしないといけない。
  • オブジェクトでない型(=プリミティブ型という)の値は数値、文字列、null,true,false。
  • 数値はすべて実数。(整数型はない)
  • Hashは特にHash用のオブジェクトはなく、Object型を作ってHashのようにアクセスすれば良い。
  • Arrayはある。ただし、Arrayの添字に文字列を指定して代入、取り出しもできる(!)
  • ArrayやHash(というかObject)の添字は、数値指定するのと数値を文字列して指定するのは等価(!)

ー オブジェクトのプロパティとHashはアクセス方法が違うだけで中身は同じ(!!!)

  • true,1,'1'が真でnull,0,'0'が偽。(評価時に型変換している?)
  • 特に文字列('1'や'0')で True or False が判定できるのはゾワワっとくる。
  • === 演算子で本当に一致しているか確認できる。
  • new演算子がすげーわかりにくい。今回一番はまった。
  • コンストラクタ関数が返す値で作成されるオブジェクトが変わるということらしい。
  • selfとthisの違いは表現方法なので好みだけど、実装者のオブジェクトへの距離なのかしら。


クラスがなかったり、変数のスコープの種類が少ないのは
プロセスの寿命が短い(=ページがLoadされてからUnloadされるまで)という
想定があったからかいな。


シンプル仕様で面白いなー。
だけど、new演算子だけが相対的にググっと複雑でわかりにくいし
何でこういう動作になってるんだろう。


ともかく、もっと早く学んでおけば良かった。