ksino's diary

覚えたことを忘れないように、小さなことでも書いていく。

JavaScriptをきちんと勉強しようと思ったのでメモ(随時更新)

なんとなく読み書きしてきたJavaScriptですが、最近はフロント側の仕事に携わることが多くなってきたので、きちんと勉強しておこうと思いました。勉強したことをメモっておきます。

勉強したこと

  • varを使わずに宣言した変数はグローバル変数になる
    • 変数宣言はとりあえずvarをつけておかないと危険
  • 等価比較(==)と同値比較(===)。等価比較は型が一致しなくても、同じ値とみなせればOK。同値比較は型も一致しないとNG。
  • return文が定義されていない関数はundefinedを返す。
  • newで呼び出された関数は、returnの有無に関わらず、Objectのインスタンスを返す。
  • オブジェクトは {key1:value1, key2:value2, method1:function() {〜}}のように生成できる。
  • 関数呼び出し時に引数チェックは実施されない。
  • for (var v in 配列、オブジェクト) {〜} とした場合、vには配列のインデックス番号やオブジェクトのキー名が入る。Javaの拡張for文とは異なるので注意。
  • for (var v of 配列) {〜} とした場合、vには値が入る。(for-inとは異なり、オブジェクトは使用不可)
  • オブジェクトはprototypeへの参照を持っている。よって、prototypeを使ってオブジェクトにメソッドを追加することができる。
  • 関数内でのthisはglobalオブジェクトを参照する。メソッド内でのthisはメソッドが属するオブジェクトを参照する。コンストラクタ内でのthisは生成したインスタンスを参照する。
  • call, applyメソッドは、引数で指定されたオブジェクトをthisとして関数を実行する。callとapplyの違いは引数の書き方のみ。(callは可変長引数、applyは配列)
  • [...iterable(配列や文字列), ...iterable]で、iterableなオブジェクトを連結できる。
  • (function(p1, p2) { 〜 })('foo', 'bar');のような書き方を即時関数という。
  • コンストラクタの実体は関数。
  • classブロックの中にconsructorという名前の関数を書くと、クラスのコンストラクタとなる。