日々徒然

プログラミングしたりお酒飲んだりする毎日

Rubyしか書けないエンジニアから脱却するためのJavaScript Primerお勉強②

はじめに

前回はこちら

blog.hirovodka.com

続きからやってく

文と式

評価した結果を変数に代入できるものは式、それ以外は文っていう認識で良さそう

この辺り曖昧だったから前回の記事もめちゃくちゃかも...

条件分岐

この辺りはRubyとそんなに変わらなそう

case使うときに明示的にbreakしないと処理が継続するところがちょっと違う

ループと反復処理

この辺りもRubyっぽい感じ

コールバック関数を使っていい感じに処理を書くのがjsっぽいのかな?

continuenext的な感じで使えそう

オブジェクト

Rubyのぼっち演算子がjsでは?.

オブジェクトがプロパティを持っていて、それを呼んでいるだけってところがRubyと違うのかな?

Rubyだとクラス(オブジェクト)があってメソッドがあるけど、jsには実体としてオブジェクトがあって、そのオブジェクトのプロパティを呼んでるだけっていう理解であってるかな...

プロトタイプオブジェクト

オブジェクト作成時にプロトタイプオブジェクトが作成されて、それがオブジェクトのプロトタイプを継承しているためプロトタイプメソッドが使える...

何となくは分かったけど、いろんな用語が出てきすぎて訳分からなくなる

オブジェクトのインスタンスメソッドとオブジェクトのプロパティって一緒の意味なのかなと思ったけど、言い分けてる違いは何だろう...

プロパティが関数の場合はインスタンスメソッドっていう呼び方?

あとそもそもJavaScriptでいう『オブジェクト』っていうのは連想配列key,valueの形の{}のことなのか、それともプリミティブ型以外のもの全てのことなのか?

とりあえずどんな値も先祖はObjectのプロトタイプで、そこで定義されてるプロパティを呼び出せるってことかな

配列

割とRubyと似た感じ

この辺りは実際触るときにメソッド調べながら実装になりそう

ただ破壊的、非破壊的メソッドはハマりそう...

文字列

同上

ラッパーオブジェクト

プリミティブ型はオブジェクトじゃないのに何でメソッドが呼べるのかが分かった

JavaScriptでは、プリミティブ型の値に対してプロパティアクセスするとき、自動で対応するラッパーオブジェクトに変換されます。 たとえば"string"という文字列は、自動的にnew String("string")のようなラッパーオブジェクトへ変換されています。 これにより、プリミティブ型の値である文字列がStringのインスタンスメソッドを呼び出せるようになります。

ここでいう『プロパティアクセス』と『インスタンスメソッド』は別の意味なのかな? ちょっと用語がややこしい気がする...

関数とスコープ

クロージャーとかスコープは何となくRubyと比べて違和感ないので、今は大体の理解で良さそう

感想

用語の意味がよく分かってない感じがする

一応仕組み自体は何となく分かったけど、もっと突き詰めて理解したいなぁと思う