diff --git a/note.md b/note.md new file mode 100644 index 0000000..779311f --- /dev/null +++ b/note.md @@ -0,0 +1,24 @@ +# 重要だと感じたこと +## 値・型・変数 +* readonlyはそのオブジェクトが入れ子になっている場合、その中のオブジェクトのプロパティまでをreadonlyにしない +* const assertionはすべてのプロパティを固定する +* pushメソッドやpopメソッドは配列に対して破壊的操作をする +* コンパイルエラーを無視しないようにする(エラーになった箇所は自動修正されない) +* 静的型付けではコンパイルのタイミングで型が決まる。動的型付けでは実行時に型が決まる +* プリミティブからオブジェクトへの変換をボックス化(boxing)と言う。 +* JavaScriptでは、自動ボックス化により、プリミティブ型の値でもフィールドを参照できたり、メソッドが呼び出せる。 +* JavaScriptが内部的にプリミティブ型の値をオブジェクトに暗黙変換しているのを自動ボックス化(auto-boxing)という。 +* JavaScriptの自動ボックス化で変換先となるオブジェクトをラッパーオブジェクト(wrapper object)と呼ぶ。 +* プリミティブ型の代わりに、ラッパーオブジェクト型を型注釈に使う利点はない。型注釈にはプリミティブ型を使うべき。 +* JavaScriptには、整数と小数を型レベルで区別するものはない。どちらもnumber型で表現する。 +* NaNは特殊で、等号比較では常にfalseになる +* JavaScriptの小数の計算には誤差が生じる場合がある。 +* undefinedとnullの使い分けについて、基本的にはundefinedに寄せる。 +* リテラル型はマジックナンバーやステートの表現に用いられる。 +### オブジェクト +* オプションプロパティ(Optional Properties)とは、オブジェクトの中で必ずしも存在しなくても良いプロパティのこと +* JavaScriptのオプショナルチェーンはnullやundefinedのプロパティを誤って参照しないようにしつつ、記述量を抑えられる書き方。(Rubyのぼっち演算子的なイメージで理解した。) +* オブジェクトのループについて、for-inで反復処理を書く場合は、hasOwnPropertyでプロパティがプロトタイプのものでないことをチェックしたほうが安全。 +### TypeScriptと構造的型付け +* TypeScriptは構造的型付けを型システムとして採用している。 +* ダックタイピングは、オブジェクトの型よりもオブジェクトの持つメソッドやプロパティが何であるかによってオブジェクトを判断するプログラミングスタイル。構造的型付けは、ダックタイピングに適した型システム。